code: def convert_to_low_level(ir):
      
      if ir.function_name == 'transfer':
          assert len(ir.arguments) == 1
          ir = Transfer(ir.destination, ir.arguments[0])
          return ir
      elif ir.function_name == 'send':
          assert len(ir.arguments) == 1
          ir = Send(ir.destination, ir.arguments[0], ir.lvalue)
          ir.lvalue.set_type(ElementaryType('bool'))
          return ir
      elif ir.destination.name ==  'abi' and ir.function_name in ['encode',
                                                                  'encodePacked',
                                                                  'encodeWithSelector',
                                                                  'encodeWithSignature',
                                                                  'decode']:
  
          call = SolidityFunction('abi.{}()'.format(ir.function_name))
          new_ir = SolidityCall(call, ir.nbr_arguments, ir.lvalue, ir.type_call)
          new_ir.arguments = ir.arguments
          if isinstance(call.return_type, list) and len(call.return_type) == 1:
              new_ir.lvalue.set_type(call.return_type[0])
          else:
              new_ir.lvalue.set_type(call.return_type)
          return new_ir
      elif ir.function_name in ['call',
                                'delegatecall',
                                'callcode',
                                'staticcall']:
          new_ir = LowLevelCall(ir.destination,
                            ir.function_name,
                            ir.nbr_arguments,
                            ir.lvalue,
                            ir.type_call)
          new_ir.call_gas = ir.call_gas
          new_ir.call_value = ir.call_value
          new_ir.arguments = ir.arguments
          new_ir.lvalue.set_type(ElementaryType('bool'))
          return new_ir
      logger.error('Incorrect conversion to low level {}'.format(ir))
      exit(-1)
docs: Convert to a transfer/send/or low level call
          The funciton assume to receive a correct IR
          The checks must be done by the caller
  
          Additionally convert abi... to solidityfunction