{
  "contractName": "DEX",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxAmountA",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxAmountB",
          "type": "uint256"
        }
      ],
      "name": "AddedLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "remove_share",
          "type": "uint256"
        }
      ],
      "name": "RemovedLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "supply_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "target_amount",
          "type": "uint256"
        }
      ],
      "name": "Swaped",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "getLiquidityPool",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "getLiquidityTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "supplyAmount",
          "type": "uint256"
        }
      ],
      "name": "getSwapTargetAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "targetAmount",
          "type": "uint256"
        }
      ],
      "name": "getSwapSupplyAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "supplyAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minTargetAmount",
          "type": "uint256"
        }
      ],
      "name": "swapWithExactSupply",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "targetAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSupplyAmount",
          "type": "uint256"
        }
      ],
      "name": "swapWithExactTarget",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxAmountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxAmountB",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minShareIncrement",
          "type": "uint256"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "removeShare",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minWithdrawnA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minWithdrawnB",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.0+commit.c7dfd78e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxAmountA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxAmountB\",\"type\":\"uint256\"}],\"name\":\"AddedLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remove_share\",\"type\":\"uint256\"}],\"name\":\"RemovedLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"supply_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"target_amount\",\"type\":\"uint256\"}],\"name\":\"Swaped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountB\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShareIncrement\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getLiquidityPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getLiquidityTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"targetAmount\",\"type\":\"uint256\"}],\"name\":\"getSwapSupplyAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"supplyAmount\",\"type\":\"uint256\"}],\"name\":\"getSwapTargetAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"removeShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawnA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawnB\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"supplyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTargetAmount\",\"type\":\"uint256\"}],\"name\":\"swapWithExactSupply\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"targetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSupplyAmount\",\"type\":\"uint256\"}],\"name\":\"swapWithExactTarget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidity(address,address,uint256,uint256,uint256)\":{\"details\":\"Add liquidity to the trading pair. Returns a boolean value indicating whether the operation succeeded.\"},\"getLiquidityPool(address,address)\":{\"details\":\"Get liquidity pool of the currency_id_a and currency_id_b. Returns (liquidity_a, liquidity_b)\"},\"getLiquidityTokenAddress(address,address)\":{\"details\":\"Get Liquidity token address. Returns (liquidity_token_address)\"},\"getSwapSupplyAmount(address[],uint256)\":{\"details\":\"Get swap supply amount. Returns (supply_amount)\"},\"getSwapTargetAmount(address[],uint256)\":{\"details\":\"Get swap target amount. Returns (target_amount)\"},\"removeLiquidity(address,address,uint256,uint256,uint256)\":{\"details\":\"Remove liquidity from the trading pair. Returns a boolean value indicating whether the operation succeeded.\"},\"swapWithExactSupply(address[],uint256,uint256)\":{\"details\":\"Swap with exact supply. Returns a boolean value indicating whether the operation succeeded.\"},\"swapWithExactTarget(address[],uint256,uint256)\":{\"details\":\"Swap with exact target. Returns a boolean value indicating whether the operation succeeded.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/DEX.sol\":\"DEX\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/DEX.sol\":{\"keccak256\":\"0x785e6c274eee9ba591c5e7e828b76cd8d8ea88e49d4b24b94d3b2a6472471071\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5b679beebafe73dc268e2956b17be3c68e15888ad40c80db219c7896252b7ffa\",\"dweb:/ipfs/QmPqqsXisbohkGdbirkUC85SgyH9Sa4ZK1cwoW6MgBeiX9\"]},\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/IDEX.sol\":{\"keccak256\":\"0x139b56d71b84a9781e5da2fed311191cfd2c569653c325980e7159d12861e6c8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9a2d59a633b20a52f4e955c571f6832dbacabfdf9428b0a4dc8320352cf0ebc7\",\"dweb:/ipfs/QmXqfM3LYM6H1sDybKmDCFEVvJKj6RuPQqPrXWkju2hC3t\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506120d5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063dbcd19a21161005b578063dbcd19a21461014d578063e2dc85dc1461017d578063f4f31ede146101ad578063ffd73c4a146101de57610088565b80633d8d96201461008d5780634d60beb1146100bd5780636fc4b4e5146100ed57806391c98a2a1461011d575b600080fd5b6100a760048036038101906100a291906117e5565b61020e565b6040516100b49190611d0a565b60405180910390f35b6100d760048036038101906100d29190611791565b6104ad565b6040516100e49190611e25565b60405180910390f35b610107600480360381019061010291906117e5565b6106f2565b6040516101149190611d0a565b60405180910390f35b6101376004803603810190610132919061171a565b610991565b6040516101449190611d0a565b60405180910390f35b61016760048036038101906101629190611791565b610c9f565b6040516101749190611e25565b60405180910390f35b6101976004803603810190610192919061171a565b610ee4565b6040516101a49190611d0a565b60405180910390f35b6101c760048036038101906101c291906116de565b6111ac565b6040516101d5929190611e40565b60405180910390f35b6101f860048036038101906101f391906116de565b6113be565b6040516102059190611bab565b60405180910390f35b600080600090505b84518110156102e257600073ffffffffffffffffffffffffffffffffffffffff16858281518110610270577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156102cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c690611d65565b60405180910390fd5b80806102da90611fb3565b915050610216565b506000831415610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031e90611dc5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff163387878760405160240161035a9493929190611c50565b6040516020818303038152906040527f9782ac81000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516103e49190611b94565b6000604051808303816000865af19150503d8060008114610421576040519150601f19603f3d011682016040523d82523d6000602084013e610426565b606091505b5091509150600082141561043b573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a8783806020019051810190610488919061184c565b8860405161049893929190611ccc565b60405180910390a26001925050509392505050565b600080600090505b835181101561058157600073ffffffffffffffffffffffffffffffffffffffff1684828151811061050f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561056e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056590611d65565b60405180910390fd5b808061057990611fb3565b9150506104b5565b5060008214156105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd90611d85565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016105f5929190611c9c565b6040516020818303038152906040527f4d60beb1000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161067f9190611b94565b600060405180830381855afa9150503d80600081146106ba576040519150601f19603f3d011682016040523d82523d6000602084013e6106bf565b606091505b509150915060008214156106d4573d60208201fd5b808060200190518101906106e8919061184c565b9250505092915050565b600080600090505b84518110156107c657600073ffffffffffffffffffffffffffffffffffffffff16858281518110610754577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156107b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107aa90611d65565b60405180910390fd5b80806107be90611fb3565b9150506106fa565b50600083141561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290611d85565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff163387878760405160240161083e9493929190611c50565b6040516020818303038152906040527f579baa18000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108c89190611b94565b6000604051808303816000865af19150503d8060008114610905576040519150601f19603f3d011682016040523d82523d6000602084013e61090a565b606091505b5091509150600082141561091f573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a87878480602001905181019061096d919061184c565b60405161097c93929190611ccc565b60405180910390a26001925050509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990611de5565b60405180910390fd5b6000841415610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90611e05565b60405180910390fd5b6000831415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190611d25565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff16338989898989604051602401610b3196959493929190611bef565b6040516020818303038152906040527f67088d59000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610bbb9190611b94565b6000604051808303816000865af19150503d8060008114610bf8576040519150601f19603f3d011682016040523d82523d6000602084013e610bfd565b606091505b50915091506000821415610c12573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c88989604051610c88929190611e40565b60405180910390a460019250505095945050505050565b600080600090505b8351811015610d7357600073ffffffffffffffffffffffffffffffffffffffff16848281518110610d01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790611d65565b60405180910390fd5b8080610d6b90611fb3565b915050610ca7565b506000821415610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90611dc5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff168585604051602401610de7929190611c9c565b6040516020818303038152906040527fdbcd19a2000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610e719190611b94565b600060405180830381855afa9150503d8060008114610eac576040519150601f19603f3d011682016040523d82523d6000602084013e610eb1565b606091505b50915091506000821415610ec6573d60208201fd5b80806020019051810190610eda919061184c565b9250505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc90611de5565b60405180910390fd5b6000841415611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090611da5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1633898989898960405160240161104096959493929190611bef565b6040516020818303038152906040527f35315332000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516110ca9190611b94565b6000604051808303816000865af19150503d8060008114611107576040519150601f19603f3d011682016040523d82523d6000602084013e61110c565b606091505b50915091506000821415611121573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df6896040516111959190611e25565b60405180910390a460019250505095945050505050565b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690611de5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1686866040516024016112be929190611bc6565b6040516020818303038152906040527ff4f31ede000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516113489190611b94565b600060405180830381855afa9150503d8060008114611383576040519150601f19603f3d011682016040523d82523d6000602084013e611388565b606091505b5091509150600082141561139d573d60208201fd5b808060200190518101906113b19190611875565b9350935050509250929050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690611de5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016114ce929190611bc6565b6040516020818303038152906040527fffd73c4a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516115589190611b94565b600060405180830381855afa9150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b509150915060008214156115ad573d60208201fd5b808060200190518101906115c191906116b5565b9250505092915050565b60006115de6115d984611e9a565b611e69565b905080838252602082019050828560208602820111156115fd57600080fd5b60005b8581101561162d57816116138882611637565b845260208401935060208301925050600181019050611600565b5050509392505050565b6000813590506116468161205a565b92915050565b60008151905061165b81612071565b92915050565b600082601f83011261167257600080fd5b81356116828482602086016115cb565b91505092915050565b60008135905061169a81612088565b92915050565b6000815190506116af81612088565b92915050565b6000602082840312156116c757600080fd5b60006116d58482850161164c565b91505092915050565b600080604083850312156116f157600080fd5b60006116ff85828601611637565b925050602061171085828601611637565b9150509250929050565b600080600080600060a0868803121561173257600080fd5b600061174088828901611637565b955050602061175188828901611637565b94505060406117628882890161168b565b93505060606117738882890161168b565b92505060806117848882890161168b565b9150509295509295909350565b600080604083850312156117a457600080fd5b600083013567ffffffffffffffff8111156117be57600080fd5b6117ca85828601611661565b92505060206117db8582860161168b565b9150509250929050565b6000806000606084860312156117fa57600080fd5b600084013567ffffffffffffffff81111561181457600080fd5b61182086828701611661565b93505060206118318682870161168b565b92505060406118428682870161168b565b9150509250925092565b60006020828403121561185e57600080fd5b600061186c848285016116a0565b91505092915050565b6000806040838503121561188857600080fd5b6000611896858286016116a0565b92505060206118a7858286016116a0565b9150509250929050565b60006118bd83836118c9565b60208301905092915050565b6118d281611f26565b82525050565b6118e181611f26565b82525050565b60006118f282611ed6565b6118fc8185611ef9565b935061190783611ec6565b8060005b8381101561193857815161191f88826118b1565b975061192a83611eec565b92505060018101905061190b565b5085935050505092915050565b61194e81611f4a565b82525050565b600061195f82611ee1565b6119698185611f0a565b9350611979818560208601611f80565b80840191505092915050565b6000611992601783611f15565b91507f4445583a206d6178416d6f756e7442206973207a65726f0000000000000000006000830152602082019050919050565b60006119d2601b83611f15565b91507f4445583a20746f6b656e41206973207a65726f206164647265737300000000006000830152602082019050919050565b6000611a12601a83611f15565b91507f4445583a20746f6b656e206973207a65726f20616464726573730000000000006000830152602082019050919050565b6000611a52601983611f15565b91507f4445583a20737570706c79416d6f756e74206973207a65726f000000000000006000830152602082019050919050565b6000611a92601883611f15565b91507f4445583a2072656d6f76655368617265206973207a65726f00000000000000006000830152602082019050919050565b6000611ad2601983611f15565b91507f4445583a20746172676574416d6f756e74206973207a65726f000000000000006000830152602082019050919050565b6000611b12601b83611f15565b91507f4445583a20746f6b656e42206973207a65726f206164647265737300000000006000830152602082019050919050565b6000611b52601783611f15565b91507f4445583a206d6178416d6f756e7441206973207a65726f0000000000000000006000830152602082019050919050565b611b8e81611f76565b82525050565b6000611ba08284611954565b915081905092915050565b6000602082019050611bc060008301846118d8565b92915050565b6000604082019050611bdb60008301856118d8565b611be860208301846118d8565b9392505050565b600060c082019050611c0460008301896118d8565b611c1160208301886118d8565b611c1e60408301876118d8565b611c2b6060830186611b85565b611c386080830185611b85565b611c4560a0830184611b85565b979650505050505050565b6000608082019050611c6560008301876118d8565b8181036020830152611c7781866118e7565b9050611c866040830185611b85565b611c936060830184611b85565b95945050505050565b60006040820190508181036000830152611cb681856118e7565b9050611cc56020830184611b85565b9392505050565b60006060820190508181036000830152611ce681866118e7565b9050611cf56020830185611b85565b611d026040830184611b85565b949350505050565b6000602082019050611d1f6000830184611945565b92915050565b60006020820190508181036000830152611d3e81611985565b9050919050565b60006020820190508181036000830152611d5e816119c5565b9050919050565b60006020820190508181036000830152611d7e81611a05565b9050919050565b60006020820190508181036000830152611d9e81611a45565b9050919050565b60006020820190508181036000830152611dbe81611a85565b9050919050565b60006020820190508181036000830152611dde81611ac5565b9050919050565b60006020820190508181036000830152611dfe81611b05565b9050919050565b60006020820190508181036000830152611e1e81611b45565b9050919050565b6000602082019050611e3a6000830184611b85565b92915050565b6000604082019050611e556000830185611b85565b611e626020830184611b85565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715611e9057611e8f61202b565b5b8060405250919050565b600067ffffffffffffffff821115611eb557611eb461202b565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611f3182611f56565b9050919050565b6000611f4382611f56565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015611f9e578082015181840152602081019050611f83565b83811115611fad576000848401525b50505050565b6000611fbe82611f76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ff157611ff0611ffc565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61206381611f26565b811461206e57600080fd5b50565b61207a81611f38565b811461208557600080fd5b50565b61209181611f76565b811461209c57600080fd5b5056fea26469706673582212205afd204b5e69cc8a34fa2fa750ccbf41c1bda7959ff8c65712c09969d746496564736f6c63430008000033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063dbcd19a21161005b578063dbcd19a21461014d578063e2dc85dc1461017d578063f4f31ede146101ad578063ffd73c4a146101de57610088565b80633d8d96201461008d5780634d60beb1146100bd5780636fc4b4e5146100ed57806391c98a2a1461011d575b600080fd5b6100a760048036038101906100a291906117e5565b61020e565b6040516100b49190611d0a565b60405180910390f35b6100d760048036038101906100d29190611791565b6104ad565b6040516100e49190611e25565b60405180910390f35b610107600480360381019061010291906117e5565b6106f2565b6040516101149190611d0a565b60405180910390f35b6101376004803603810190610132919061171a565b610991565b6040516101449190611d0a565b60405180910390f35b61016760048036038101906101629190611791565b610c9f565b6040516101749190611e25565b60405180910390f35b6101976004803603810190610192919061171a565b610ee4565b6040516101a49190611d0a565b60405180910390f35b6101c760048036038101906101c291906116de565b6111ac565b6040516101d5929190611e40565b60405180910390f35b6101f860048036038101906101f391906116de565b6113be565b6040516102059190611bab565b60405180910390f35b600080600090505b84518110156102e257600073ffffffffffffffffffffffffffffffffffffffff16858281518110610270577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156102cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c690611d65565b60405180910390fd5b80806102da90611fb3565b915050610216565b506000831415610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031e90611dc5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff163387878760405160240161035a9493929190611c50565b6040516020818303038152906040527f9782ac81000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516103e49190611b94565b6000604051808303816000865af19150503d8060008114610421576040519150601f19603f3d011682016040523d82523d6000602084013e610426565b606091505b5091509150600082141561043b573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a8783806020019051810190610488919061184c565b8860405161049893929190611ccc565b60405180910390a26001925050509392505050565b600080600090505b835181101561058157600073ffffffffffffffffffffffffffffffffffffffff1684828151811061050f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561056e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056590611d65565b60405180910390fd5b808061057990611fb3565b9150506104b5565b5060008214156105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd90611d85565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016105f5929190611c9c565b6040516020818303038152906040527f4d60beb1000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161067f9190611b94565b600060405180830381855afa9150503d80600081146106ba576040519150601f19603f3d011682016040523d82523d6000602084013e6106bf565b606091505b509150915060008214156106d4573d60208201fd5b808060200190518101906106e8919061184c565b9250505092915050565b600080600090505b84518110156107c657600073ffffffffffffffffffffffffffffffffffffffff16858281518110610754577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156107b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107aa90611d65565b60405180910390fd5b80806107be90611fb3565b9150506106fa565b50600083141561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290611d85565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff163387878760405160240161083e9493929190611c50565b6040516020818303038152906040527f579baa18000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108c89190611b94565b6000604051808303816000865af19150503d8060008114610905576040519150601f19603f3d011682016040523d82523d6000602084013e61090a565b606091505b5091509150600082141561091f573d60208201fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a87878480602001905181019061096d919061184c565b60405161097c93929190611ccc565b60405180910390a26001925050509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990611de5565b60405180910390fd5b6000841415610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90611e05565b60405180910390fd5b6000831415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190611d25565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff16338989898989604051602401610b3196959493929190611bef565b6040516020818303038152906040527f67088d59000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610bbb9190611b94565b6000604051808303816000865af19150503d8060008114610bf8576040519150601f19603f3d011682016040523d82523d6000602084013e610bfd565b606091505b50915091506000821415610c12573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5b6f5f6550282279c4e72b95a8ba538bea92c64dec9e8c7c08a556d4457225c88989604051610c88929190611e40565b60405180910390a460019250505095945050505050565b600080600090505b8351811015610d7357600073ffffffffffffffffffffffffffffffffffffffff16848281518110610d01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790611d65565b60405180910390fd5b8080610d6b90611fb3565b915050610ca7565b506000821415610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90611dc5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff168585604051602401610de7929190611c9c565b6040516020818303038152906040527fdbcd19a2000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610e719190611b94565b600060405180830381855afa9150503d8060008114610eac576040519150601f19603f3d011682016040523d82523d6000602084013e610eb1565b606091505b50915091506000821415610ec6573d60208201fd5b80806020019051810190610eda919061184c565b9250505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc90611de5565b60405180910390fd5b6000841415611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090611da5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1633898989898960405160240161104096959493929190611bef565b6040516020818303038152906040527f35315332000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516110ca9190611b94565b6000604051808303816000865af19150503d8060008114611107576040519150601f19603f3d011682016040523d82523d6000602084013e61110c565b606091505b50915091506000821415611121573d60208201fd5b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f038116623990e7d0fed04a27e35b5dc88000ea942b37360c5898ae750bfa5df6896040516111959190611e25565b60405180910390a460019250505095945050505050565b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690611de5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1686866040516024016112be929190611bc6565b6040516020818303038152906040527ff4f31ede000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516113489190611b94565b600060405180830381855afa9150503d8060008114611383576040519150601f19603f3d011682016040523d82523d6000602084013e611388565b606091505b5091509150600082141561139d573d60208201fd5b808060200190518101906113b19190611875565b9350935050509250929050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690611d45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690611de5565b60405180910390fd5b60008061040573ffffffffffffffffffffffffffffffffffffffff1685856040516024016114ce929190611bc6565b6040516020818303038152906040527fffd73c4a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516115589190611b94565b600060405180830381855afa9150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b509150915060008214156115ad573d60208201fd5b808060200190518101906115c191906116b5565b9250505092915050565b60006115de6115d984611e9a565b611e69565b905080838252602082019050828560208602820111156115fd57600080fd5b60005b8581101561162d57816116138882611637565b845260208401935060208301925050600181019050611600565b5050509392505050565b6000813590506116468161205a565b92915050565b60008151905061165b81612071565b92915050565b600082601f83011261167257600080fd5b81356116828482602086016115cb565b91505092915050565b60008135905061169a81612088565b92915050565b6000815190506116af81612088565b92915050565b6000602082840312156116c757600080fd5b60006116d58482850161164c565b91505092915050565b600080604083850312156116f157600080fd5b60006116ff85828601611637565b925050602061171085828601611637565b9150509250929050565b600080600080600060a0868803121561173257600080fd5b600061174088828901611637565b955050602061175188828901611637565b94505060406117628882890161168b565b93505060606117738882890161168b565b92505060806117848882890161168b565b9150509295509295909350565b600080604083850312156117a457600080fd5b600083013567ffffffffffffffff8111156117be57600080fd5b6117ca85828601611661565b92505060206117db8582860161168b565b9150509250929050565b6000806000606084860312156117fa57600080fd5b600084013567ffffffffffffffff81111561181457600080fd5b61182086828701611661565b93505060206118318682870161168b565b92505060406118428682870161168b565b9150509250925092565b60006020828403121561185e57600080fd5b600061186c848285016116a0565b91505092915050565b6000806040838503121561188857600080fd5b6000611896858286016116a0565b92505060206118a7858286016116a0565b9150509250929050565b60006118bd83836118c9565b60208301905092915050565b6118d281611f26565b82525050565b6118e181611f26565b82525050565b60006118f282611ed6565b6118fc8185611ef9565b935061190783611ec6565b8060005b8381101561193857815161191f88826118b1565b975061192a83611eec565b92505060018101905061190b565b5085935050505092915050565b61194e81611f4a565b82525050565b600061195f82611ee1565b6119698185611f0a565b9350611979818560208601611f80565b80840191505092915050565b6000611992601783611f15565b91507f4445583a206d6178416d6f756e7442206973207a65726f0000000000000000006000830152602082019050919050565b60006119d2601b83611f15565b91507f4445583a20746f6b656e41206973207a65726f206164647265737300000000006000830152602082019050919050565b6000611a12601a83611f15565b91507f4445583a20746f6b656e206973207a65726f20616464726573730000000000006000830152602082019050919050565b6000611a52601983611f15565b91507f4445583a20737570706c79416d6f756e74206973207a65726f000000000000006000830152602082019050919050565b6000611a92601883611f15565b91507f4445583a2072656d6f76655368617265206973207a65726f00000000000000006000830152602082019050919050565b6000611ad2601983611f15565b91507f4445583a20746172676574416d6f756e74206973207a65726f000000000000006000830152602082019050919050565b6000611b12601b83611f15565b91507f4445583a20746f6b656e42206973207a65726f206164647265737300000000006000830152602082019050919050565b6000611b52601783611f15565b91507f4445583a206d6178416d6f756e7441206973207a65726f0000000000000000006000830152602082019050919050565b611b8e81611f76565b82525050565b6000611ba08284611954565b915081905092915050565b6000602082019050611bc060008301846118d8565b92915050565b6000604082019050611bdb60008301856118d8565b611be860208301846118d8565b9392505050565b600060c082019050611c0460008301896118d8565b611c1160208301886118d8565b611c1e60408301876118d8565b611c2b6060830186611b85565b611c386080830185611b85565b611c4560a0830184611b85565b979650505050505050565b6000608082019050611c6560008301876118d8565b8181036020830152611c7781866118e7565b9050611c866040830185611b85565b611c936060830184611b85565b95945050505050565b60006040820190508181036000830152611cb681856118e7565b9050611cc56020830184611b85565b9392505050565b60006060820190508181036000830152611ce681866118e7565b9050611cf56020830185611b85565b611d026040830184611b85565b949350505050565b6000602082019050611d1f6000830184611945565b92915050565b60006020820190508181036000830152611d3e81611985565b9050919050565b60006020820190508181036000830152611d5e816119c5565b9050919050565b60006020820190508181036000830152611d7e81611a05565b9050919050565b60006020820190508181036000830152611d9e81611a45565b9050919050565b60006020820190508181036000830152611dbe81611a85565b9050919050565b60006020820190508181036000830152611dde81611ac5565b9050919050565b60006020820190508181036000830152611dfe81611b05565b9050919050565b60006020820190508181036000830152611e1e81611b45565b9050919050565b6000602082019050611e3a6000830184611b85565b92915050565b6000604082019050611e556000830185611b85565b611e626020830184611b85565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715611e9057611e8f61202b565b5b8060405250919050565b600067ffffffffffffffff821115611eb557611eb461202b565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611f3182611f56565b9050919050565b6000611f4382611f56565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015611f9e578082015181840152602081019050611f83565b83811115611fad576000848401525b50505050565b6000611fbe82611f76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ff157611ff0611ffc565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61206381611f26565b811461206e57600080fd5b50565b61207a81611f38565b811461208557600080fd5b50565b61209181611f76565b811461209c57600080fd5b5056fea26469706673582212205afd204b5e69cc8a34fa2fa750ccbf41c1bda7959ff8c65712c09969d746496564736f6c63430008000033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:20638:20",
        "statements": [
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "126:520:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "136:89:20",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "217:6:20"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_t_array$_t_address_$dyn_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "160:56:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "160:64:20"
                      }
                    ],
                    "functionName": {
                      "name": "allocateMemory",
                      "nodeType": "YulIdentifier",
                      "src": "145:14:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "145:80:20"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "136:5:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "234:16:20",
                  "value": {
                    "name": "array",
                    "nodeType": "YulIdentifier",
                    "src": "245:5:20"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "238:3:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "266:5:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "273:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "259:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "259:21:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "259:21:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "281:23:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "292:5:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "299:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "288:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "288:16:20"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "281:3:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "313:17:20",
                  "value": {
                    "name": "offset",
                    "nodeType": "YulIdentifier",
                    "src": "324:6:20"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "317:3:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "379:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "388:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "391:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "381:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "381:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "381:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "349:3:20"
                          },
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "358:6:20"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "366:4:20",
                                "type": "",
                                "value": "0x20"
                              }
                            ],
                            "functionName": {
                              "name": "mul",
                              "nodeType": "YulIdentifier",
                              "src": "354:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "354:17:20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "345:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "345:27:20"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "374:3:20"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "342:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "342:36:20"
                  },
                  "nodeType": "YulIf",
                  "src": "339:2:20"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "464:176:20",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "478:21:20",
                        "value": {
                          "name": "src",
                          "nodeType": "YulIdentifier",
                          "src": "496:3:20"
                        },
                        "variables": [
                          {
                            "name": "elementPos",
                            "nodeType": "YulTypedName",
                            "src": "482:10:20",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "519:3:20"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "elementPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "545:10:20"
                                },
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "557:3:20"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_t_address",
                                "nodeType": "YulIdentifier",
                                "src": "524:20:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "524:37:20"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "512:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "512:50:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "512:50:20"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "575:21:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "586:3:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "591:4:20",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "582:3:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "582:14:20"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "575:3:20"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "609:21:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "620:3:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "625:4:20",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "616:3:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "616:14:20"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "609:3:20"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "426:1:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "429:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "423:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "423:13:20"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "437:18:20",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "439:14:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "448:1:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "451:1:20",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "444:3:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "444:9:20"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "439:1:20"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "408:14:20",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "410:10:20",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "419:1:20",
                          "type": "",
                          "value": "0"
                        },
                        "variables": [
                          {
                            "name": "i",
                            "nodeType": "YulTypedName",
                            "src": "414:1:20",
                            "type": ""
                          }
                        ]
                      }
                    ]
                  },
                  "src": "404:236:20"
                }
              ]
            },
            "name": "abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "96:6:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "104:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "112:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "120:5:20",
                "type": ""
              }
            ],
            "src": "24:622:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "704:87:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "714:29:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "736:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "723:12:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "723:20:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "714:5:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "779:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "752:26:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "752:33:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "752:33:20"
                }
              ]
            },
            "name": "abi_decode_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "682:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "690:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "698:5:20",
                "type": ""
              }
            ],
            "src": "652:139:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "868:88:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "878:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "893:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "887:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "887:13:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "878:5:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "944:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_address_payable",
                      "nodeType": "YulIdentifier",
                      "src": "909:34:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "909:41:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "909:41:20"
                }
              ]
            },
            "name": "abi_decode_t_address_payable_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "846:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "854:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "862:5:20",
                "type": ""
              }
            ],
            "src": "797:159:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1056:226:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1105:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1114:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1117:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1107:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1107:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1107:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1084:6:20"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1092:4:20",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1080:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1080:17:20"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "1099:3:20"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1076:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1076:27:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1069:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1069:35:20"
                  },
                  "nodeType": "YulIf",
                  "src": "1066:2:20"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1130:34:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1157:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1144:12:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1144:20:20"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1134:6:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1173:103:20",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1249:6:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1257:4:20",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1245:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1245:17:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1264:6:20"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "1272:3:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "1182:62:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1182:94:20"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "1173:5:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_t_array$_t_address_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1034:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1042:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "1050:5:20",
                "type": ""
              }
            ],
            "src": "979:303:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1340:87:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1350:29:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1372:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1359:12:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1359:20:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1350:5:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1415:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "1388:26:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1388:33:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1388:33:20"
                }
              ]
            },
            "name": "abi_decode_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1318:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1326:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1334:5:20",
                "type": ""
              }
            ],
            "src": "1288:139:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1496:80:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1506:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1521:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1515:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1515:13:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1506:5:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1564:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "1537:26:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1537:33:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1537:33:20"
                }
              ]
            },
            "name": "abi_decode_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1474:6:20",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1482:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1490:5:20",
                "type": ""
              }
            ],
            "src": "1433:143:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1667:215:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1713:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1722:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1725:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1715:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1715:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1715:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1688:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1697:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1684:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1684:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1709:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1680:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1680:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "1677:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "1739:136:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1754:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1768:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "1758:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1783:82:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1837:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1848:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1833:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1833:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1857:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address_payable_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "1793:39:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1793:72:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1783:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payable_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1637:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1648:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1660:6:20",
                "type": ""
              }
            ],
            "src": "1582:300:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1971:324:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2017:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2026:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2029:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2019:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2019:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2019:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1992:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2001:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1988:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1988:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2013:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1984:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1984:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "1981:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2043:117:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2058:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2072:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2062:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2087:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2122:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2133:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2118:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2118:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2142:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "2097:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2097:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "2087:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2170:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2185:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2199:2:20",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2189:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2215:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2250:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2261:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2246:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2246:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2270:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "2225:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2225:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "2215:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1933:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1944:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1956:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1964:6:20",
                "type": ""
              }
            ],
            "src": "1888:407:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2435:710:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2482:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2491:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2494:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2484:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2484:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2484:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2456:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2465:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2452:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2452:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2477:3:20",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2448:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2448:33:20"
                  },
                  "nodeType": "YulIf",
                  "src": "2445:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2508:117:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2523:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2537:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2527:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2552:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2587:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2598:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2583:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2583:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2607:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "2562:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2562:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "2552:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2635:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2650:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2664:2:20",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2654:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2680:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2715:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2726:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2711:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2711:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2735:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "2690:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2690:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "2680:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2763:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2778:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2792:2:20",
                        "type": "",
                        "value": "64"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2782:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2808:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2843:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2854:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2839:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2839:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2863:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "2818:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2818:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "2808:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "2891:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "2906:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2920:2:20",
                        "type": "",
                        "value": "96"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "2910:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2936:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "2971:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2982:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2967:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2967:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2991:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "2946:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2946:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value3",
                          "nodeType": "YulIdentifier",
                          "src": "2936:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3019:119:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3034:17:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3048:3:20",
                        "type": "",
                        "value": "128"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3038:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3065:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3100:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3111:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3096:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3096:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3120:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "3075:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3075:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value4",
                          "nodeType": "YulIdentifier",
                          "src": "3065:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2373:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2384:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2396:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2404:6:20",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2412:6:20",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2420:6:20",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2428:6:20",
                "type": ""
              }
            ],
            "src": "2301:844:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3259:442:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3305:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3314:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3317:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3307:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3307:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3307:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3280:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3289:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3276:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3276:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3301:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3272:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3272:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "3269:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3331:235:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3346:45:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3377:9:20"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3388:1:20",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3373:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3373:17:20"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "3360:12:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3360:31:20"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3350:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "3438:16:20",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3447:1:20",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3450:1:20",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "3440:6:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3440:12:20"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "3440:12:20"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3410:6:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3418:18:20",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "3407:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3407:30:20"
                      },
                      "nodeType": "YulIf",
                      "src": "3404:2:20"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3468:88:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3528:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3539:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3524:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3524:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3548:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_array$_t_address_$dyn_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "3478:45:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3478:78:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "3468:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3576:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3591:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3605:2:20",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3595:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "3621:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3656:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3667:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3652:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3652:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3676:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "3631:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3631:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "3621:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3221:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3232:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3244:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3252:6:20",
                "type": ""
              }
            ],
            "src": "3151:550:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3832:570:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3878:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3887:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3890:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3880:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3880:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3880:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3853:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3862:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3849:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3849:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3874:2:20",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3845:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3845:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "3842:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "3904:235:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "3919:45:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "3950:9:20"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3961:1:20",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3946:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3946:17:20"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "3933:12:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3933:31:20"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "3923:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "4011:16:20",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4020:1:20",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4023:1:20",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "4013:6:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4013:12:20"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "4013:12:20"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3983:6:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3991:18:20",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "3980:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3980:30:20"
                      },
                      "nodeType": "YulIf",
                      "src": "3977:2:20"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4041:88:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4101:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4112:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4097:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4097:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4121:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_array$_t_address_$dyn_memory_ptr",
                          "nodeType": "YulIdentifier",
                          "src": "4051:45:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4051:78:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "4041:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4149:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4164:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4178:2:20",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4168:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4194:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4229:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4240:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4225:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4225:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4249:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "4204:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4204:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "4194:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4277:118:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4292:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4306:2:20",
                        "type": "",
                        "value": "64"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4296:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4322:63:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4357:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4368:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4353:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4353:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4377:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "4332:20:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4332:53:20"
                      },
                      "variableNames": [
                        {
                          "name": "value2",
                          "nodeType": "YulIdentifier",
                          "src": "4322:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3786:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3797:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3809:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3817:6:20",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3825:6:20",
                "type": ""
              }
            ],
            "src": "3707:695:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4485:207:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4531:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4540:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4543:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4533:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4533:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4533:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4506:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4515:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4502:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4502:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4527:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4498:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4498:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "4495:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4557:128:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4572:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4586:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4576:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4601:74:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4647:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4658:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4643:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4643:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4667:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "4611:31:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4611:64:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "4601:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4455:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4466:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4478:6:20",
                "type": ""
              }
            ],
            "src": "4408:284:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4792:346:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4838:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4847:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4850:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4840:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4840:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4840:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4813:7:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4822:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4809:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4809:23:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4834:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4805:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4805:32:20"
                  },
                  "nodeType": "YulIf",
                  "src": "4802:2:20"
                },
                {
                  "nodeType": "YulBlock",
                  "src": "4864:128:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "4879:15:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4893:1:20",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "4883:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "4908:74:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "4954:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4965:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4950:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4950:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4974:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "4918:31:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4918:64:20"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "4908:6:20"
                        }
                      ]
                    }
                  ]
                },
                {
                  "nodeType": "YulBlock",
                  "src": "5002:129:20",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "5017:16:20",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5031:2:20",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "5021:6:20",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "5047:74:20",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "5093:9:20"
                              },
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5104:6:20"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5089:3:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5089:22:20"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5113:7:20"
                          }
                        ],
                        "functionName": {
                          "name": "abi_decode_t_uint256_fromMemory",
                          "nodeType": "YulIdentifier",
                          "src": "5057:31:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5057:64:20"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "5047:6:20"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4754:9:20",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4765:7:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4777:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4785:6:20",
                "type": ""
              }
            ],
            "src": "4698:440:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5224:99:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "5268:6:20"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5276:3:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "5234:33:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5234:46:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5234:46:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5289:28:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5307:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5312:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5303:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5303:14:20"
                  },
                  "variableNames": [
                    {
                      "name": "updatedPos",
                      "nodeType": "YulIdentifier",
                      "src": "5289:10:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encodeUpdatedPos_t_address_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5197:6:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5205:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updatedPos",
                "nodeType": "YulTypedName",
                "src": "5213:10:20",
                "type": ""
              }
            ],
            "src": "5144:179:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5384:53:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5401:3:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "5424:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "5406:17:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5406:24:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5394:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5394:37:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5394:37:20"
                }
              ]
            },
            "name": "abi_encode_t_address_to_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5372:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5379:3:20",
                "type": ""
              }
            ],
            "src": "5329:108:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5508:53:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5525:3:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "5548:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_address",
                          "nodeType": "YulIdentifier",
                          "src": "5530:17:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5530:24:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5518:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5518:37:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5518:37:20"
                }
              ]
            },
            "name": "abi_encode_t_address_to_t_address_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5496:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5503:3:20",
                "type": ""
              }
            ],
            "src": "5443:118:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5721:608:20",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5731:68:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5793:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_length_t_array$_t_address_$dyn_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "5745:47:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5745:54:20"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "5735:6:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5808:93:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "5889:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "5894:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "5815:73:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5815:86:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "5808:3:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5910:71:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5975:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_dataslot_t_array$_t_address_$dyn_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "5925:49:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5925:56:20"
                  },
                  "variables": [
                    {
                      "name": "baseRef",
                      "nodeType": "YulTypedName",
                      "src": "5914:7:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5990:21:20",
                  "value": {
                    "name": "baseRef",
                    "nodeType": "YulIdentifier",
                    "src": "6004:7:20"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "5994:6:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6080:224:20",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "6094:34:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "6121:6:20"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "6115:5:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6115:13:20"
                        },
                        "variables": [
                          {
                            "name": "elementValue0",
                            "nodeType": "YulTypedName",
                            "src": "6098:13:20",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "6141:70:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "elementValue0",
                              "nodeType": "YulIdentifier",
                              "src": "6192:13:20"
                            },
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "6207:3:20"
                            }
                          ],
                          "functionName": {
                            "name": "abi_encodeUpdatedPos_t_address_to_t_address",
                            "nodeType": "YulIdentifier",
                            "src": "6148:43:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6148:63:20"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "6141:3:20"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "6224:70:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "6287:6:20"
                            }
                          ],
                          "functionName": {
                            "name": "array_nextElement_t_array$_t_address_$dyn_memory_ptr",
                            "nodeType": "YulIdentifier",
                            "src": "6234:52:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6234:60:20"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "6224:6:20"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "6042:1:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6045:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "6039:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6039:13:20"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "6053:18:20",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6055:14:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "6064:1:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6067:1:20",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "6060:3:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6060:9:20"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "6055:1:20"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "6024:14:20",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "6026:10:20",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "6035:1:20",
                          "type": "",
                          "value": "0"
                        },
                        "variables": [
                          {
                            "name": "i",
                            "nodeType": "YulTypedName",
                            "src": "6030:1:20",
                            "type": ""
                          }
                        ]
                      }
                    ]
                  },
                  "src": "6020:284:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6313:10:20",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "6320:3:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "6313:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "5700:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "5707:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "5716:3:20",
                "type": ""
              }
            ],
            "src": "5597:732:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6394:50:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6411:3:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "6431:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_bool",
                          "nodeType": "YulIdentifier",
                          "src": "6416:14:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6416:21:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6404:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6404:34:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6404:34:20"
                }
              ]
            },
            "name": "abi_encode_t_bool_to_t_bool_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6382:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "6389:3:20",
                "type": ""
              }
            ],
            "src": "6335:109:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6558:265:20",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6568:52:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "6614:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_length_t_bytes_memory_ptr",
                      "nodeType": "YulIdentifier",
                      "src": "6582:31:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6582:38:20"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "6572:6:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6629:95:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6712:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6717:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "6636:75:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6636:88:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "6629:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "6759:5:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6766:4:20",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6755:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6755:16:20"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6773:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6778:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "6733:21:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6733:52:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6733:52:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6794:23:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "6805:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6810:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6801:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6801:16:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "6794:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6539:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "6546:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "6554:3:20",
                "type": ""
              }
            ],
            "src": "6450:373:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6975:175:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6985:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7051:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7056:2:20",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "6992:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6992:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "6985:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "7080:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7085:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7076:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7076:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7089:25:20",
                        "type": "",
                        "value": "DEX: maxAmountB is zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7069:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7069:46:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7069:46:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7125:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7136:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7141:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7132:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7132:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "7125:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "6963:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "6971:3:20",
                "type": ""
              }
            ],
            "src": "6829:321:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7302:179:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7312:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7378:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7383:2:20",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "7319:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7319:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "7312:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "7407:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7412:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7403:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7403:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7416:29:20",
                        "type": "",
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7396:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7396:50:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7396:50:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7456:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7467:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7472:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7463:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7463:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "7456:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "7290:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7298:3:20",
                "type": ""
              }
            ],
            "src": "7156:325:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7633:178:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7643:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7709:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7714:2:20",
                        "type": "",
                        "value": "26"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "7650:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7650:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "7643:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "7738:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7743:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7734:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7734:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7747:28:20",
                        "type": "",
                        "value": "DEX: token is zero address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7727:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7727:49:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7727:49:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7786:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "7797:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7802:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7793:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7793:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "7786:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "7621:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7629:3:20",
                "type": ""
              }
            ],
            "src": "7487:324:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7963:177:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7973:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8039:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8044:2:20",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "7980:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7980:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "7973:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "8068:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8073:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8064:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8064:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8077:27:20",
                        "type": "",
                        "value": "DEX: supplyAmount is zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8057:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8057:48:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8057:48:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8115:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8126:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8131:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8122:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8122:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "8115:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "7951:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7959:3:20",
                "type": ""
              }
            ],
            "src": "7817:323:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8292:176:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8302:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8368:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8373:2:20",
                        "type": "",
                        "value": "24"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "8309:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8309:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "8302:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "8397:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8402:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8393:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8393:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8406:26:20",
                        "type": "",
                        "value": "DEX: removeShare is zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8386:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8386:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8386:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8443:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8454:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8459:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8450:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8450:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "8443:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "8280:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "8288:3:20",
                "type": ""
              }
            ],
            "src": "8146:322:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8620:177:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8630:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8696:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8701:2:20",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "8637:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8637:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "8630:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "8725:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8730:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8721:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8721:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8734:27:20",
                        "type": "",
                        "value": "DEX: targetAmount is zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8714:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8714:48:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8714:48:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8772:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "8783:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8788:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8779:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8779:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "8772:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "8608:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "8616:3:20",
                "type": ""
              }
            ],
            "src": "8474:323:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8949:179:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8959:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9025:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9030:2:20",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "8966:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8966:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "8959:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "9054:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9059:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9050:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9050:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9063:29:20",
                        "type": "",
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9043:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9043:50:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9043:50:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9103:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9114:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9119:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9110:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9110:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "9103:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "8937:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "8945:3:20",
                "type": ""
              }
            ],
            "src": "8803:325:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9280:175:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9290:74:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9356:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9361:2:20",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "9297:58:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9297:67:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "9290:3:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "9385:3:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9390:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9381:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9381:11:20"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9394:25:20",
                        "type": "",
                        "value": "DEX: maxAmountA is zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9374:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9374:46:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9374:46:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9430:19:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9441:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9446:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9437:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9437:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "9430:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392_to_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9268:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "9276:3:20",
                "type": ""
              }
            ],
            "src": "9134:321:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9526:53:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9543:3:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "9566:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "cleanup_t_uint256",
                          "nodeType": "YulIdentifier",
                          "src": "9548:17:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9548:24:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9536:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9536:37:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9536:37:20"
                }
              ]
            },
            "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "9514:5:20",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9521:3:20",
                "type": ""
              }
            ],
            "src": "9461:118:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9719:137:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9730:100:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "9817:6:20"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9826:3:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "9737:79:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9737:93:20"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "9730:3:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9840:10:20",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "9847:3:20"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "9840:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9698:3:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9704:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "9715:3:20",
                "type": ""
              }
            ],
            "src": "9585:271:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9960:124:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9970:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9982:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9993:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9978:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9978:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9970:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "10050:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10063:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10074:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10059:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10059:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10006:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10006:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10006:71:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9932:9:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9944:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9955:4:20",
                "type": ""
              }
            ],
            "src": "9862:222:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10216:206:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10226:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10238:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10249:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10234:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10234:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10226:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "10306:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10319:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10330:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10315:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10315:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10262:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10262:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10262:71:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "10387:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10400:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10411:2:20",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10396:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10396:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10343:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10343:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10343:72:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10180:9:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10192:6:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10200:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10211:4:20",
                "type": ""
              }
            ],
            "src": "10090:332:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10666:537:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10676:27:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10688:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10699:3:20",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10684:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10684:19:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10676:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "10757:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10770:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10781:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10766:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10766:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10713:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10713:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10713:71:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "10838:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10851:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10862:2:20",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10847:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10847:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10794:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10794:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10794:72:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "10920:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10933:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10944:2:20",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10929:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10929:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10876:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10876:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10876:72:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "11002:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11015:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11026:2:20",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11011:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11011:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "10958:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10958:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10958:72:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "11084:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11097:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11108:3:20",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11093:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11093:19:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11040:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11040:73:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11040:73:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value5",
                        "nodeType": "YulIdentifier",
                        "src": "11167:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11180:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11191:3:20",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11176:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11176:19:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11123:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11123:73:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11123:73:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10598:9:20",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "10610:6:20",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "10618:6:20",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "10626:6:20",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "10634:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "10642:6:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10650:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10661:4:20",
                "type": ""
              }
            ],
            "src": "10428:775:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11441:472:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11451:27:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11463:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11474:3:20",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11459:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11459:19:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11451:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "11532:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11545:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11556:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11541:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11541:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_address_to_t_address_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11488:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11488:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11488:71:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11580:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11591:2:20",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11576:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11576:18:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "11600:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11606:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "11596:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11596:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11569:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11569:48:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11569:48:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11626:116:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "11728:6:20"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "11737:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11634:93:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11634:108:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11626:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "11796:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11809:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11820:2:20",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11805:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11805:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11752:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11752:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11752:72:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "11878:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11891:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11902:2:20",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11887:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11887:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "11834:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11834:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11834:72:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__to_t_address_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11389:9:20",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "11401:6:20",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "11409:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11417:6:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11425:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11436:4:20",
                "type": ""
              }
            ],
            "src": "11209:704:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12095:307:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12105:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12117:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12128:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12113:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12113:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12105:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12152:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12163:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12148:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12148:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "12171:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12177:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12167:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12167:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12141:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12141:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12141:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12197:116:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12299:6:20"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "12308:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12205:93:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12205:108:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12197:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12367:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12380:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12391:2:20",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12376:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12376:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12323:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12323:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12323:72:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256__to_t_array$_t_address_$dyn_memory_ptr_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12059:9:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12071:6:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12079:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12090:4:20",
                "type": ""
              }
            ],
            "src": "11919:483:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12612:389:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12622:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12634:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12645:2:20",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12630:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12630:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12622:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12669:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12680:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12665:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12665:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "12688:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12694:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12684:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12684:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12658:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12658:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12658:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12714:116:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12816:6:20"
                      },
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "12825:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12722:93:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12722:108:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12714:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12884:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12897:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12908:2:20",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12893:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12893:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12840:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12840:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12840:72:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "12966:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12979:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12990:2:20",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12975:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12975:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "12922:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12922:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12922:72:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12568:9:20",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "12580:6:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12588:6:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12596:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12607:4:20",
                "type": ""
              }
            ],
            "src": "12408:593:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13099:118:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "13109:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13121:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13132:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13117:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13117:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13109:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "13183:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13196:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13207:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13192:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13192:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_bool_to_t_bool_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13145:37:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13145:65:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13145:65:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13071:9:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13083:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13094:4:20",
                "type": ""
              }
            ],
            "src": "13007:210:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13394:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "13404:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13416:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13427:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13412:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13412:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13404:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13451:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13462:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13447:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13447:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "13470:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13476:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13466:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13466:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13440:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13440:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13440:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13496:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "13630:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13504:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13504:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13496:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13374:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13389:4:20",
                "type": ""
              }
            ],
            "src": "13223:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13819:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "13829:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13841:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13852:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13837:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13837:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13829:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13876:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13887:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13872:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13872:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "13895:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13901:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13891:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13891:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13865:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13865:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13865:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13921:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "14055:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "13929:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13929:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13921:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13799:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13814:4:20",
                "type": ""
              }
            ],
            "src": "13648:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14244:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14254:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14266:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14277:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14262:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14262:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14254:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14301:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14312:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14297:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14297:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "14320:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14326:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "14316:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14316:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14290:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14290:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14290:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14346:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "14480:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "14354:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14354:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14346:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14224:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14239:4:20",
                "type": ""
              }
            ],
            "src": "14073:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14669:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14679:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14691:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14702:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14687:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14687:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14679:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14726:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14737:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14722:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14722:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "14745:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14751:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "14741:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14741:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14715:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14715:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14715:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14771:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "14905:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "14779:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14779:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14771:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14649:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14664:4:20",
                "type": ""
              }
            ],
            "src": "14498:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15094:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15104:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15116:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15127:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15112:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15112:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15104:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15151:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15162:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15147:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15147:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "15170:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15176:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15166:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15166:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15140:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15140:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15140:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15196:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "15330:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "15204:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15204:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15196:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15074:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15089:4:20",
                "type": ""
              }
            ],
            "src": "14923:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15519:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15529:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15541:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15552:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15537:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15537:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15529:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15576:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15587:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15572:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15572:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "15595:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15601:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15591:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15591:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15565:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15565:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15565:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15621:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "15755:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "15629:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15629:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15621:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15499:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15514:4:20",
                "type": ""
              }
            ],
            "src": "15348:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15944:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15954:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15966:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15977:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15962:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15962:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15954:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16001:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16012:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15997:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15997:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "16020:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16026:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "16016:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16016:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15990:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15990:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15990:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16046:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "16180:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16054:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16054:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16046:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15924:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15939:4:20",
                "type": ""
              }
            ],
            "src": "15773:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16369:248:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16379:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16391:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16402:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16387:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16387:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16379:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16426:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16437:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16422:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16422:17:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail",
                            "nodeType": "YulIdentifier",
                            "src": "16445:4:20"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16451:9:20"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "16441:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16441:20:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16415:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16415:47:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16415:47:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16471:139:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "tail",
                        "nodeType": "YulIdentifier",
                        "src": "16605:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392_to_t_string_memory_ptr_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16479:124:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16479:131:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16471:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16349:9:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16364:4:20",
                "type": ""
              }
            ],
            "src": "16198:419:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16721:124:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16731:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16743:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16754:2:20",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16739:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16739:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16731:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "16811:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16824:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16835:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16820:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16820:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "16767:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16767:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16767:71:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16693:9:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16705:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16716:4:20",
                "type": ""
              }
            ],
            "src": "16623:222:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16977:206:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16987:26:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16999:9:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17010:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16995:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16995:18:20"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16987:4:20"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "17067:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17080:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17091:1:20",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17076:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17076:17:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "17023:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17023:71:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17023:71:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "17148:6:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17161:9:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17172:2:20",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17157:3:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17157:18:20"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                      "nodeType": "YulIdentifier",
                      "src": "17104:43:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17104:72:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17104:72:20"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16941:9:20",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16953:6:20",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16961:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16972:4:20",
                "type": ""
              }
            ],
            "src": "16851:332:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17229:243:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17239:19:20",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17255:2:20",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "17249:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17249:9:20"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "17239:6:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17267:35:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "17289:6:20"
                      },
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "17297:4:20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17285:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17285:17:20"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "17271:10:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17413:22:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "17415:16:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17415:18:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17415:18:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "17356:10:20"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17368:18:20",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "17353:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17353:34:20"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "17392:10:20"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "17404:6:20"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "17389:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17389:22:20"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "17350:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17350:62:20"
                  },
                  "nodeType": "YulIf",
                  "src": "17347:2:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17451:2:20",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "17455:10:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17444:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17444:22:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17444:22:20"
                }
              ]
            },
            "name": "allocateMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "17213:4:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "17222:6:20",
                "type": ""
              }
            ],
            "src": "17189:283:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17560:229:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17665:22:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "17667:16:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17667:18:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17667:18:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "17637:6:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17645:18:20",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "17634:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17634:30:20"
                  },
                  "nodeType": "YulIf",
                  "src": "17631:2:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17697:25:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "17709:6:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17717:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "17705:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17705:17:20"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "17697:4:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17759:23:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "size",
                        "nodeType": "YulIdentifier",
                        "src": "17771:4:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17777:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17767:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17767:15:20"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "17759:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_t_array$_t_address_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "17544:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "17555:4:20",
                "type": ""
              }
            ],
            "src": "17478:311:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17867:60:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17877:11:20",
                  "value": {
                    "name": "ptr",
                    "nodeType": "YulIdentifier",
                    "src": "17885:3:20"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "17877:4:20"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17898:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "ptr",
                        "nodeType": "YulIdentifier",
                        "src": "17910:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17915:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17906:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17906:14:20"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "17898:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_dataslot_t_array$_t_address_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nodeType": "YulTypedName",
                "src": "17854:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "17862:4:20",
                "type": ""
              }
            ],
            "src": "17795:132:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18007:40:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18018:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18034:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "18028:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18028:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "18018:6:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_length_t_array$_t_address_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "17990:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "18000:6:20",
                "type": ""
              }
            ],
            "src": "17933:114:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18111:40:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18122:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18138:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "18132:5:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18132:12:20"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "18122:6:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_length_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18094:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "18104:6:20",
                "type": ""
              }
            ],
            "src": "18053:98:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18232:38:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18242:22:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "ptr",
                        "nodeType": "YulIdentifier",
                        "src": "18254:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18259:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18250:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18250:14:20"
                  },
                  "variableNames": [
                    {
                      "name": "next",
                      "nodeType": "YulIdentifier",
                      "src": "18242:4:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_nextElement_t_array$_t_address_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nodeType": "YulTypedName",
                "src": "18219:3:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "next",
                "nodeType": "YulTypedName",
                "src": "18227:4:20",
                "type": ""
              }
            ],
            "src": "18157:113:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18387:73:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "18404:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "18409:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18397:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18397:19:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18397:19:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18425:29:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "18444:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18449:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18440:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18440:14:20"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "18425:11:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "18359:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "18364:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "18375:11:20",
                "type": ""
              }
            ],
            "src": "18276:184:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18579:34:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18589:18:20",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "18604:3:20"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "18589:11:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "18551:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "18556:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "18567:11:20",
                "type": ""
              }
            ],
            "src": "18466:147:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18715:73:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "18732:3:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "18737:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18725:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18725:19:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18725:19:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18753:29:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "18772:3:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18777:4:20",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18768:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18768:14:20"
                  },
                  "variableNames": [
                    {
                      "name": "updated_pos",
                      "nodeType": "YulIdentifier",
                      "src": "18753:11:20"
                    }
                  ]
                }
              ]
            },
            "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "18687:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "18692:6:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "updated_pos",
                "nodeType": "YulTypedName",
                "src": "18703:11:20",
                "type": ""
              }
            ],
            "src": "18619:169:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18839:51:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18849:35:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18878:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "18860:17:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18860:24:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18849:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18821:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18831:7:20",
                "type": ""
              }
            ],
            "src": "18794:96:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18949:51:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18959:35:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "18988:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint160",
                      "nodeType": "YulIdentifier",
                      "src": "18970:17:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18970:24:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "18959:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "18931:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "18941:7:20",
                "type": ""
              }
            ],
            "src": "18896:104:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19048:48:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19058:32:20",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "19083:5:20"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "19076:6:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19076:13:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "19069:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19069:21:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "19058:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19030:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "19040:7:20",
                "type": ""
              }
            ],
            "src": "19006:90:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19147:81:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19157:65:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19172:5:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19179:42:20",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "19168:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19168:54:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "19157:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint160",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19129:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "19139:7:20",
                "type": ""
              }
            ],
            "src": "19102:126:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19279:32:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19289:16:20",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "19300:5:20"
                  },
                  "variableNames": [
                    {
                      "name": "cleaned",
                      "nodeType": "YulIdentifier",
                      "src": "19289:7:20"
                    }
                  ]
                }
              ]
            },
            "name": "cleanup_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19261:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "cleaned",
                "nodeType": "YulTypedName",
                "src": "19271:7:20",
                "type": ""
              }
            ],
            "src": "19234:77:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19366:258:20",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "19376:10:20",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "19385:1:20",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "19380:1:20",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "19445:63:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "19470:3:20"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "19475:1:20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "19466:3:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19466:11:20"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "19489:3:20"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "19494:1:20"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "19485:3:20"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "19485:11:20"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "19479:5:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19479:18:20"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "19459:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19459:39:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "19459:39:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "19406:1:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "19409:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "19403:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19403:13:20"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "19417:19:20",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "19419:15:20",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "19428:1:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "19431:2:20",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "19424:3:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19424:10:20"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "19419:1:20"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "19399:3:20",
                    "statements": []
                  },
                  "src": "19395:113:20"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "19542:76:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "19592:3:20"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "19597:6:20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "19588:3:20"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19588:16:20"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "19606:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "19581:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19581:27:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "19581:27:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "19523:1:20"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "19526:6:20"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "19520:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19520:13:20"
                  },
                  "nodeType": "YulIf",
                  "src": "19517:2:20"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "19348:3:20",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "19353:3:20",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "19358:6:20",
                "type": ""
              }
            ],
            "src": "19317:307:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19673:190:20",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19683:33:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19710:5:20"
                      }
                    ],
                    "functionName": {
                      "name": "cleanup_t_uint256",
                      "nodeType": "YulIdentifier",
                      "src": "19692:17:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19692:24:20"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "19683:5:20"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "19806:22:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "19808:16:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19808:18:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "19808:18:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19731:5:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19738:66:20",
                        "type": "",
                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "19728:2:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19728:77:20"
                  },
                  "nodeType": "YulIf",
                  "src": "19725:2:20"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19837:20:20",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "19848:5:20"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19855:1:20",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19844:3:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19844:13:20"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "19837:3:20"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "19659:5:20",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "19669:3:20",
                "type": ""
              }
            ],
            "src": "19630:233:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19897:152:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19914:1:20",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19917:77:20",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19907:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19907:88:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19907:88:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20011:1:20",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20014:4:20",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20004:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20004:15:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20004:15:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20035:1:20",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20038:4:20",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "20028:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20028:15:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20028:15:20"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "19869:180:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20083:152:20",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20100:1:20",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20103:77:20",
                        "type": "",
                        "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20093:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20093:88:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20093:88:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20197:1:20",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20200:4:20",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20190:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20190:15:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20190:15:20"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20221:1:20",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20224:4:20",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "20214:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20214:15:20"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20214:15:20"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "20055:180:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20284:79:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20341:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20350:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20353:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20343:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20343:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20343:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20307:5:20"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20332:5:20"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address",
                              "nodeType": "YulIdentifier",
                              "src": "20314:17:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20314:24:20"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "20304:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20304:35:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20297:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20297:43:20"
                  },
                  "nodeType": "YulIf",
                  "src": "20294:2:20"
                }
              ]
            },
            "name": "validator_revert_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20277:5:20",
                "type": ""
              }
            ],
            "src": "20241:122:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20420:87:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20485:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20494:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20497:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20487:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20487:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20487:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20443:5:20"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20476:5:20"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_address_payable",
                              "nodeType": "YulIdentifier",
                              "src": "20450:25:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20450:32:20"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "20440:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20440:43:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20433:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20433:51:20"
                  },
                  "nodeType": "YulIf",
                  "src": "20430:2:20"
                }
              ]
            },
            "name": "validator_revert_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20413:5:20",
                "type": ""
              }
            ],
            "src": "20369:138:20"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20556:79:20",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "20613:16:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20622:1:20",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20625:1:20",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "20615:6:20"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "20615:12:20"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "20615:12:20"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "20579:5:20"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "20604:5:20"
                              }
                            ],
                            "functionName": {
                              "name": "cleanup_t_uint256",
                              "nodeType": "YulIdentifier",
                              "src": "20586:17:20"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "20586:24:20"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "20576:2:20"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20576:35:20"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "20569:6:20"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20569:43:20"
                  },
                  "nodeType": "YulIf",
                  "src": "20566:2:20"
                }
              ]
            },
            "name": "validator_revert_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "20549:5:20",
                "type": ""
              }
            ],
            "src": "20513:122:20"
          }
        ]
      },
      "contents": "{\n\n    // address[]\n    function abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr(offset, length, end) -> array {\n        array := allocateMemory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))\n        let dst := array\n        mstore(array, length) dst := add(array, 0x20)\n        let src := offset\n        if gt(add(src, mul(length, 0x20)), end) { revert(0, 0) }\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementPos := src\n            mstore(dst, abi_decode_t_address(elementPos, end))\n            dst := add(dst, 0x20)\n            src := add(src, 0x20)\n        }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_t_address_payable_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address_payable(value)\n    }\n\n    // address[]\n    function abi_decode_t_array$_t_address_$dyn_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_payable_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value0 := abi_decode_t_array$_t_address_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value0 := abi_decode_t_array$_t_address_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encodeUpdatedPos_t_address_to_t_address(value0, pos) -> updatedPos {\n        abi_encode_t_address_to_t_address(value0, pos)\n        updatedPos := add(pos, 0x20)\n    }\n\n    function abi_encode_t_address_to_t_address(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    // address[] -> address[]\n    function abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_address_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_address_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_address_to_t_address(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_address_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 23)\n\n        mstore(add(pos, 0), \"DEX: maxAmountB is zero\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n\n        mstore(add(pos, 0), \"DEX: tokenA is zero address\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 26)\n\n        mstore(add(pos, 0), \"DEX: token is zero address\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n\n        mstore(add(pos, 0), \"DEX: supplyAmount is zero\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 24)\n\n        mstore(add(pos, 0), \"DEX: removeShare is zero\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n\n        mstore(add(pos, 0), \"DEX: targetAmount is zero\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n\n        mstore(add(pos, 0), \"DEX: tokenB is zero address\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 23)\n\n        mstore(add(pos, 0), \"DEX: maxAmountA is zero\")\n\n        end := add(pos, 32)\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value5, value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 192)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value4,  add(headStart, 128))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value5,  add(headStart, 160))\n\n    }\n\n    function abi_encode_tuple_t_address_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__to_t_address_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value1,  tail)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n    }\n\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256__to_t_array$_t_address_$dyn_memory_ptr_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value0,  tail)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value0,  tail)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function allocateMemory(size) -> memPtr {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, size)\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := mul(length, 0x20)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function array_dataslot_t_array$_t_address_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function array_length_t_array$_t_address_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_nextElement_t_array$_t_address_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_address_payable(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function copy_memory_to_memory(src, dst, length) {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length)\n        {\n            // clear end\n            mstore(add(dst, length), 0)\n        }\n    }\n\n    function increment_t_uint256(value) -> ret {\n        value := cleanup_t_uint256(value)\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_address_payable(value) {\n        if iszero(eq(value, cleanup_t_address_payable(value))) { revert(0, 0) }\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n}\n",
      "id": 20,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "93:7046:0:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "93:7046:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4302:796;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1781:685;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3373:796;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5242:904;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2555:685;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6295:842;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;345:624;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1073:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4302:796;4438:4;4459:6;4468:1;4459:10;;4454:124;4475:4;:11;4471:1;:15;4454:124;;;4534:1;4515:21;;:4;4520:1;4515:7;;;;;;;;;;;;;;;;;;;;;;:21;;;;4507:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4488:3;;;;;:::i;:::-;;;;4454:124;;;;4611:1;4595:12;:17;;4587:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4654:12;4668:23;166:42;4695:15;;4793:10;4805:4;4811:12;4825:15;4711:130;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4695:147;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4653:189;;;;4890:1;4881:7;4878:14;4875:2;;;4941:16;4934:4;4922:10;4918:21;4911:47;4875:2;5004:10;4997:73;;;5016:4;5033:10;5022:33;;;;;;;;;;;;:::i;:::-;5057:12;4997:73;;;;;;;;:::i;:::-;;;;;;;;5087:4;5080:11;;;;4302:796;;;;;:::o;1781:685::-;1901:7;1925:6;1934:1;1925:10;;1920:124;1941:4;:11;1937:1;:15;1920:124;;;2000:1;1981:21;;:4;1986:1;1981:7;;;;;;;;;;;;;;;;;;;;;;:21;;;;1973:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1954:3;;;;;:::i;:::-;;;;1920:124;;;;2077:1;2061:12;:17;;2053:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2120:12;2134:23;166:42;2161:21;;2249:4;2255:12;2183:85;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:108;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:150;;;;2317:1;2308:7;2305:14;2302:2;;;2368:16;2361:4;2349:10;2345:21;2338:47;2302:2;2437:10;2426:33;;;;;;;;;;;;:::i;:::-;2419:40;;;;1781:685;;;;:::o;3373:796::-;3509:4;3530:6;3539:1;3530:10;;3525:124;3546:4;:11;3542:1;:15;3525:124;;;3605:1;3586:21;;:4;3591:1;3586:7;;;;;;;;;;;;;;;;;;;;;;:21;;;;3578:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;3559:3;;;;;:::i;:::-;;;;3525:124;;;;3682:1;3666:12;:17;;3658:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3725:12;3739:23;166:42;3766:15;;3864:10;3876:4;3882:12;3896:15;3782:130;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3766:147;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:189;;;;3961:1;3952:7;3949:14;3946:2;;;4012:16;4005:4;3993:10;3989:21;3982:47;3946:2;4075:10;4068:73;;;4087:4;4093:12;4118:10;4107:33;;;;;;;;;;;;:::i;:::-;4068:73;;;;;;;;:::i;:::-;;;;;;;;4158:4;4151:11;;;;3373:796;;;;;:::o;5242:904::-;5400:4;5442:1;5424:20;;:6;:20;;;;5416:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5512:1;5494:20;;:6;:20;;;;5486:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5578:1;5564:10;:15;;5556:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:1;5625:10;:15;;5617:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;5680:12;5694:23;166:42;5721:15;;5826:10;5838:6;5846;5854:10;5866;5878:17;5737:159;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5721:176;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5679:218;;;;5945:1;5936:7;5933:14;5930:2;;;5996:16;5989:4;5977:10;5973:21;5966:47;5930:2;6087:6;6052:66;;6079:6;6052:66;;6067:10;6052:66;;;6095:10;6107;6052:66;;;;;;;:::i;:::-;;;;;;;;6135:4;6128:11;;;;5242:904;;;;;;;:::o;2555:685::-;2675:7;2699:6;2708:1;2699:10;;2694:124;2715:4;:11;2711:1;:15;2694:124;;;2774:1;2755:21;;:4;2760:1;2755:7;;;;;;;;;;;;;;;;;;;;;;:21;;;;2747:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2728:3;;;;;:::i;:::-;;;;2694:124;;;;2851:1;2835:12;:17;;2827:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2894:12;2908:23;166:42;2935:21;;3023:4;3029:12;2957:85;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2935:108;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:150;;;;3091:1;3082:7;3079:14;3076:2;;;3142:16;3135:4;3123:10;3119:21;3112:47;3076:2;3211:10;3200:33;;;;;;;;;;;;:::i;:::-;3193:40;;;;2555:685;;;;:::o;6295:842::-;6456:4;6498:1;6480:20;;:6;:20;;;;6472:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6568:1;6550:20;;:6;:20;;;;6542:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6635:1;6620:11;:16;;6612:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6677:12;6691:23;166:42;6718:15;;6826:10;6838:6;6846;6854:11;6867:13;6882;6734:162;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6718:179;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6676:221;;;;6945:1;6936:7;6933:14;6930:2;;;6996:16;6989:4;6977:10;6973:21;6966:47;6930:2;7089:6;7052:57;;7081:6;7052:57;;7069:10;7052:57;;;7097:11;7052:57;;;;;;:::i;:::-;;;;;;;;7126:4;7119:11;;;;6295:842;;;;;;;:::o;345:624::-;449:7;458;507:1;489:20;;:6;:20;;;;481:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;577:1;559:20;;:6;:20;;;;551:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;623:12;637:23;166:42;664:21;;747:6;755;686:76;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;664:99;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;622:141;;;;811:1;802:7;799:14;796:2;;;862:16;855:4;843:10;839:21;832:47;796:2;931:10;920:42;;;;;;;;;;;;:::i;:::-;913:49;;;;;;345:624;;;;;:::o;1073:618::-;1185:7;1230:1;1212:20;;:6;:20;;;;1204:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1300:1;1282:20;;:6;:20;;;;1274:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1346:12;1360:23;166:42;1387:21;;1478:6;1486;1409:84;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1387:107;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1345:149;;;;1542:1;1533:7;1530:14;1527:2;;;1593:16;1586:4;1574:10;1570:21;1563:47;1527:2;1662:10;1651:33;;;;;;;;;;;;:::i;:::-;1644:40;;;;1073:618;;;;:::o;24:622:20:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:159::-;;893:6;887:13;878:22;;909:41;944:5;909:41;:::i;:::-;868:88;;;;:::o;979:303::-;;1099:3;1092:4;1084:6;1080:17;1076:27;1066:2;;1117:1;1114;1107:12;1066:2;1157:6;1144:20;1182:94;1272:3;1264:6;1257:4;1249:6;1245:17;1182:94;:::i;:::-;1173:103;;1056:226;;;;;:::o;1288:139::-;;1372:6;1359:20;1350:29;;1388:33;1415:5;1388:33;:::i;:::-;1340:87;;;;:::o;1433:143::-;;1521:6;1515:13;1506:22;;1537:33;1564:5;1537:33;:::i;:::-;1496:80;;;;:::o;1582:300::-;;1709:2;1697:9;1688:7;1684:23;1680:32;1677:2;;;1725:1;1722;1715:12;1677:2;1768:1;1793:72;1857:7;1848:6;1837:9;1833:22;1793:72;:::i;:::-;1783:82;;1739:136;1667:215;;;;:::o;1888:407::-;;;2013:2;2001:9;1992:7;1988:23;1984:32;1981:2;;;2029:1;2026;2019:12;1981:2;2072:1;2097:53;2142:7;2133:6;2122:9;2118:22;2097:53;:::i;:::-;2087:63;;2043:117;2199:2;2225:53;2270:7;2261:6;2250:9;2246:22;2225:53;:::i;:::-;2215:63;;2170:118;1971:324;;;;;:::o;2301:844::-;;;;;;2477:3;2465:9;2456:7;2452:23;2448:33;2445:2;;;2494:1;2491;2484:12;2445:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:53;2735:7;2726:6;2715:9;2711:22;2690:53;:::i;:::-;2680:63;;2635:118;2792:2;2818:53;2863:7;2854:6;2843:9;2839:22;2818:53;:::i;:::-;2808:63;;2763:118;2920:2;2946:53;2991:7;2982:6;2971:9;2967:22;2946:53;:::i;:::-;2936:63;;2891:118;3048:3;3075:53;3120:7;3111:6;3100:9;3096:22;3075:53;:::i;:::-;3065:63;;3019:119;2435:710;;;;;;;;:::o;3151:550::-;;;3301:2;3289:9;3280:7;3276:23;3272:32;3269:2;;;3317:1;3314;3307:12;3269:2;3388:1;3377:9;3373:17;3360:31;3418:18;3410:6;3407:30;3404:2;;;3450:1;3447;3440:12;3404:2;3478:78;3548:7;3539:6;3528:9;3524:22;3478:78;:::i;:::-;3468:88;;3331:235;3605:2;3631:53;3676:7;3667:6;3656:9;3652:22;3631:53;:::i;:::-;3621:63;;3576:118;3259:442;;;;;:::o;3707:695::-;;;;3874:2;3862:9;3853:7;3849:23;3845:32;3842:2;;;3890:1;3887;3880:12;3842:2;3961:1;3950:9;3946:17;3933:31;3991:18;3983:6;3980:30;3977:2;;;4023:1;4020;4013:12;3977:2;4051:78;4121:7;4112:6;4101:9;4097:22;4051:78;:::i;:::-;4041:88;;3904:235;4178:2;4204:53;4249:7;4240:6;4229:9;4225:22;4204:53;:::i;:::-;4194:63;;4149:118;4306:2;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4277:118;3832:570;;;;;:::o;4408:284::-;;4527:2;4515:9;4506:7;4502:23;4498:32;4495:2;;;4543:1;4540;4533:12;4495:2;4586:1;4611:64;4667:7;4658:6;4647:9;4643:22;4611:64;:::i;:::-;4601:74;;4557:128;4485:207;;;;:::o;4698:440::-;;;4834:2;4822:9;4813:7;4809:23;4805:32;4802:2;;;4850:1;4847;4840:12;4802:2;4893:1;4918:64;4974:7;4965:6;4954:9;4950:22;4918:64;:::i;:::-;4908:74;;4864:128;5031:2;5057:64;5113:7;5104:6;5093:9;5089:22;5057:64;:::i;:::-;5047:74;;5002:129;4792:346;;;;;:::o;5144:179::-;;5234:46;5276:3;5268:6;5234:46;:::i;:::-;5312:4;5307:3;5303:14;5289:28;;5224:99;;;;:::o;5329:108::-;5406:24;5424:5;5406:24;:::i;:::-;5401:3;5394:37;5384:53;;:::o;5443:118::-;5530:24;5548:5;5530:24;:::i;:::-;5525:3;5518:37;5508:53;;:::o;5597:732::-;;5745:54;5793:5;5745:54;:::i;:::-;5815:86;5894:6;5889:3;5815:86;:::i;:::-;5808:93;;5925:56;5975:5;5925:56;:::i;:::-;6004:7;6035:1;6020:284;6045:6;6042:1;6039:13;6020:284;;;6121:6;6115:13;6148:63;6207:3;6192:13;6148:63;:::i;:::-;6141:70;;6234:60;6287:6;6234:60;:::i;:::-;6224:70;;6080:224;6067:1;6064;6060:9;6055:14;;6020:284;;;6024:14;6320:3;6313:10;;5721:608;;;;;;;:::o;6335:109::-;6416:21;6431:5;6416:21;:::i;:::-;6411:3;6404:34;6394:50;;:::o;6450:373::-;;6582:38;6614:5;6582:38;:::i;:::-;6636:88;6717:6;6712:3;6636:88;:::i;:::-;6629:95;;6733:52;6778:6;6773:3;6766:4;6759:5;6755:16;6733:52;:::i;:::-;6810:6;6805:3;6801:16;6794:23;;6558:265;;;;;:::o;6829:321::-;;6992:67;7056:2;7051:3;6992:67;:::i;:::-;6985:74;;7089:25;7085:1;7080:3;7076:11;7069:46;7141:2;7136:3;7132:12;7125:19;;6975:175;;;:::o;7156:325::-;;7319:67;7383:2;7378:3;7319:67;:::i;:::-;7312:74;;7416:29;7412:1;7407:3;7403:11;7396:50;7472:2;7467:3;7463:12;7456:19;;7302:179;;;:::o;7487:324::-;;7650:67;7714:2;7709:3;7650:67;:::i;:::-;7643:74;;7747:28;7743:1;7738:3;7734:11;7727:49;7802:2;7797:3;7793:12;7786:19;;7633:178;;;:::o;7817:323::-;;7980:67;8044:2;8039:3;7980:67;:::i;:::-;7973:74;;8077:27;8073:1;8068:3;8064:11;8057:48;8131:2;8126:3;8122:12;8115:19;;7963:177;;;:::o;8146:322::-;;8309:67;8373:2;8368:3;8309:67;:::i;:::-;8302:74;;8406:26;8402:1;8397:3;8393:11;8386:47;8459:2;8454:3;8450:12;8443:19;;8292:176;;;:::o;8474:323::-;;8637:67;8701:2;8696:3;8637:67;:::i;:::-;8630:74;;8734:27;8730:1;8725:3;8721:11;8714:48;8788:2;8783:3;8779:12;8772:19;;8620:177;;;:::o;8803:325::-;;8966:67;9030:2;9025:3;8966:67;:::i;:::-;8959:74;;9063:29;9059:1;9054:3;9050:11;9043:50;9119:2;9114:3;9110:12;9103:19;;8949:179;;;:::o;9134:321::-;;9297:67;9361:2;9356:3;9297:67;:::i;:::-;9290:74;;9394:25;9390:1;9385:3;9381:11;9374:46;9446:2;9441:3;9437:12;9430:19;;9280:175;;;:::o;9461:118::-;9548:24;9566:5;9548:24;:::i;:::-;9543:3;9536:37;9526:53;;:::o;9585:271::-;;9737:93;9826:3;9817:6;9737:93;:::i;:::-;9730:100;;9847:3;9840:10;;9719:137;;;;:::o;9862:222::-;;9993:2;9982:9;9978:18;9970:26;;10006:71;10074:1;10063:9;10059:17;10050:6;10006:71;:::i;:::-;9960:124;;;;:::o;10090:332::-;;10249:2;10238:9;10234:18;10226:26;;10262:71;10330:1;10319:9;10315:17;10306:6;10262:71;:::i;:::-;10343:72;10411:2;10400:9;10396:18;10387:6;10343:72;:::i;:::-;10216:206;;;;;:::o;10428:775::-;;10699:3;10688:9;10684:19;10676:27;;10713:71;10781:1;10770:9;10766:17;10757:6;10713:71;:::i;:::-;10794:72;10862:2;10851:9;10847:18;10838:6;10794:72;:::i;:::-;10876;10944:2;10933:9;10929:18;10920:6;10876:72;:::i;:::-;10958;11026:2;11015:9;11011:18;11002:6;10958:72;:::i;:::-;11040:73;11108:3;11097:9;11093:19;11084:6;11040:73;:::i;:::-;11123;11191:3;11180:9;11176:19;11167:6;11123:73;:::i;:::-;10666:537;;;;;;;;;:::o;11209:704::-;;11474:3;11463:9;11459:19;11451:27;;11488:71;11556:1;11545:9;11541:17;11532:6;11488:71;:::i;:::-;11606:9;11600:4;11596:20;11591:2;11580:9;11576:18;11569:48;11634:108;11737:4;11728:6;11634:108;:::i;:::-;11626:116;;11752:72;11820:2;11809:9;11805:18;11796:6;11752:72;:::i;:::-;11834;11902:2;11891:9;11887:18;11878:6;11834:72;:::i;:::-;11441:472;;;;;;;:::o;11919:483::-;;12128:2;12117:9;12113:18;12105:26;;12177:9;12171:4;12167:20;12163:1;12152:9;12148:17;12141:47;12205:108;12308:4;12299:6;12205:108;:::i;:::-;12197:116;;12323:72;12391:2;12380:9;12376:18;12367:6;12323:72;:::i;:::-;12095:307;;;;;:::o;12408:593::-;;12645:2;12634:9;12630:18;12622:26;;12694:9;12688:4;12684:20;12680:1;12669:9;12665:17;12658:47;12722:108;12825:4;12816:6;12722:108;:::i;:::-;12714:116;;12840:72;12908:2;12897:9;12893:18;12884:6;12840:72;:::i;:::-;12922;12990:2;12979:9;12975:18;12966:6;12922:72;:::i;:::-;12612:389;;;;;;:::o;13007:210::-;;13132:2;13121:9;13117:18;13109:26;;13145:65;13207:1;13196:9;13192:17;13183:6;13145:65;:::i;:::-;13099:118;;;;:::o;13223:419::-;;13427:2;13416:9;13412:18;13404:26;;13476:9;13470:4;13466:20;13462:1;13451:9;13447:17;13440:47;13504:131;13630:4;13504:131;:::i;:::-;13496:139;;13394:248;;;:::o;13648:419::-;;13852:2;13841:9;13837:18;13829:26;;13901:9;13895:4;13891:20;13887:1;13876:9;13872:17;13865:47;13929:131;14055:4;13929:131;:::i;:::-;13921:139;;13819:248;;;:::o;14073:419::-;;14277:2;14266:9;14262:18;14254:26;;14326:9;14320:4;14316:20;14312:1;14301:9;14297:17;14290:47;14354:131;14480:4;14354:131;:::i;:::-;14346:139;;14244:248;;;:::o;14498:419::-;;14702:2;14691:9;14687:18;14679:26;;14751:9;14745:4;14741:20;14737:1;14726:9;14722:17;14715:47;14779:131;14905:4;14779:131;:::i;:::-;14771:139;;14669:248;;;:::o;14923:419::-;;15127:2;15116:9;15112:18;15104:26;;15176:9;15170:4;15166:20;15162:1;15151:9;15147:17;15140:47;15204:131;15330:4;15204:131;:::i;:::-;15196:139;;15094:248;;;:::o;15348:419::-;;15552:2;15541:9;15537:18;15529:26;;15601:9;15595:4;15591:20;15587:1;15576:9;15572:17;15565:47;15629:131;15755:4;15629:131;:::i;:::-;15621:139;;15519:248;;;:::o;15773:419::-;;15977:2;15966:9;15962:18;15954:26;;16026:9;16020:4;16016:20;16012:1;16001:9;15997:17;15990:47;16054:131;16180:4;16054:131;:::i;:::-;16046:139;;15944:248;;;:::o;16198:419::-;;16402:2;16391:9;16387:18;16379:26;;16451:9;16445:4;16441:20;16437:1;16426:9;16422:17;16415:47;16479:131;16605:4;16479:131;:::i;:::-;16471:139;;16369:248;;;:::o;16623:222::-;;16754:2;16743:9;16739:18;16731:26;;16767:71;16835:1;16824:9;16820:17;16811:6;16767:71;:::i;:::-;16721:124;;;;:::o;16851:332::-;;17010:2;16999:9;16995:18;16987:26;;17023:71;17091:1;17080:9;17076:17;17067:6;17023:71;:::i;:::-;17104:72;17172:2;17161:9;17157:18;17148:6;17104:72;:::i;:::-;16977:206;;;;;:::o;17189:283::-;;17255:2;17249:9;17239:19;;17297:4;17289:6;17285:17;17404:6;17392:10;17389:22;17368:18;17356:10;17353:34;17350:62;17347:2;;;17415:18;;:::i;:::-;17347:2;17455:10;17451:2;17444:22;17229:243;;;;:::o;17478:311::-;;17645:18;17637:6;17634:30;17631:2;;;17667:18;;:::i;:::-;17631:2;17717:4;17709:6;17705:17;17697:25;;17777:4;17771;17767:15;17759:23;;17560:229;;;:::o;17795:132::-;;17885:3;17877:11;;17915:4;17910:3;17906:14;17898:22;;17867:60;;;:::o;17933:114::-;;18034:5;18028:12;18018:22;;18007:40;;;:::o;18053:98::-;;18138:5;18132:12;18122:22;;18111:40;;;:::o;18157:113::-;;18259:4;18254:3;18250:14;18242:22;;18232:38;;;:::o;18276:184::-;;18409:6;18404:3;18397:19;18449:4;18444:3;18440:14;18425:29;;18387:73;;;;:::o;18466:147::-;;18604:3;18589:18;;18579:34;;;;:::o;18619:169::-;;18737:6;18732:3;18725:19;18777:4;18772:3;18768:14;18753:29;;18715:73;;;;:::o;18794:96::-;;18860:24;18878:5;18860:24;:::i;:::-;18849:35;;18839:51;;;:::o;18896:104::-;;18970:24;18988:5;18970:24;:::i;:::-;18959:35;;18949:51;;;:::o;19006:90::-;;19083:5;19076:13;19069:21;19058:32;;19048:48;;;:::o;19102:126::-;;19179:42;19172:5;19168:54;19157:65;;19147:81;;;:::o;19234:77::-;;19300:5;19289:16;;19279:32;;;:::o;19317:307::-;19385:1;19395:113;19409:6;19406:1;19403:13;19395:113;;;19494:1;19489:3;19485:11;19479:18;19475:1;19470:3;19466:11;19459:39;19431:2;19428:1;19424:10;19419:15;;19395:113;;;19526:6;19523:1;19520:13;19517:2;;;19606:1;19597:6;19592:3;19588:16;19581:27;19517:2;19366:258;;;;:::o;19630:233::-;;19692:24;19710:5;19692:24;:::i;:::-;19683:33;;19738:66;19731:5;19728:77;19725:2;;;19808:18;;:::i;:::-;19725:2;19855:1;19848:5;19844:13;19837:20;;19673:190;;;:::o;19869:180::-;19917:77;19914:1;19907:88;20014:4;20011:1;20004:15;20038:4;20035:1;20028:15;20055:180;20103:77;20100:1;20093:88;20200:4;20197:1;20190:15;20224:4;20221:1;20214:15;20241:122;20314:24;20332:5;20314:24;:::i;:::-;20307:5;20304:35;20294:2;;20353:1;20350;20343:12;20294:2;20284:79;:::o;20369:138::-;20450:32;20476:5;20450:32;:::i;:::-;20443:5;20440:43;20430:2;;20497:1;20494;20487:12;20430:2;20420:87;:::o;20513:122::-;20586:24;20604:5;20586:24;:::i;:::-;20579:5;20576:35;20566:2;;20625:1;20622;20615:12;20566:2;20556:79;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.0;\n\nimport \"./IDEX.sol\";\n\ncontract DEX is IDEX {\n    address constant private precompile = address(0x0000000000000000000000000000000000000405);\n\n    /**\n     * @dev Get liquidity pool of the currency_id_a and currency_id_b.\n     * Returns (liquidity_a, liquidity_b)\n     */\n    function getLiquidityPool(address tokenA, address tokenB)\n    public\n    view\n    override\n    returns (uint256, uint256)\n    {\n        require(tokenA != address(0), \"DEX: tokenA is zero address\");\n        require(tokenB != address(0), \"DEX: tokenB is zero address\");\n\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"getLiquidityPool(address,address)\", tokenA, tokenB));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint256, uint256));\n    }\n\n    /**\n     * @dev Get Liquidity token address.\n     * Returns (liquidity_token_address)\n     */\n    function getLiquidityTokenAddress(address tokenA, address tokenB)\n    public\n    view\n    override\n    returns (address) {\n        require(tokenA != address(0), \"DEX: tokenA is zero address\");\n        require(tokenB != address(0), \"DEX: tokenB is zero address\");\n\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"getLiquidityTokenAddress(address,address)\", tokenA, tokenB));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (address));\n    }\n\n\n    /**\n     * @dev Get swap target amount.\n     * Returns (target_amount)\n     */\n    function getSwapTargetAmount(address[] memory path, uint256 supplyAmount)\n    public\n    view\n    override\n    returns (uint256) {\n        for (uint i = 0; i < path.length; i++) {\n            require(path[i] != address(0), \"DEX: token is zero address\");\n        }\n        require(supplyAmount != 0, \"DEX: supplyAmount is zero\");\n\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"getSwapTargetAmount(address[],uint256)\", path, supplyAmount));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint256));\n    }\n\n    /**\n     * @dev Get swap supply amount.\n     * Returns (supply_amount)\n     */\n    function getSwapSupplyAmount(address[] memory path, uint256 targetAmount)\n    public\n    view\n    override\n    returns (uint256) {\n        for (uint i = 0; i < path.length; i++) {\n            require(path[i] != address(0), \"DEX: token is zero address\");\n        }\n        require(targetAmount != 0, \"DEX: targetAmount is zero\");\n\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"getSwapSupplyAmount(address[],uint256)\", path, targetAmount));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint256));\n    }\n\n    /**\n     * @dev Swap with exact supply.\n     * Returns a boolean value indicating whether the operation succeeded.\n     */\n    function swapWithExactSupply(address[] memory path, uint256 supplyAmount, uint256 minTargetAmount)\n    public\n    override\n    returns (bool) {\n        for (uint i = 0; i < path.length; i++) {\n            require(path[i] != address(0), \"DEX: token is zero address\");\n        }\n        require(supplyAmount != 0, \"DEX: supplyAmount is zero\");\n\n        (bool success, bytes memory returnData) = precompile.call(abi.encodeWithSignature(\"swapWithExactSupply(address,address[],uint256,uint256)\", msg.sender, path, supplyAmount, minTargetAmount));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        emit Swaped(msg.sender, path, supplyAmount, abi.decode(returnData, (uint256)));\n        return true;\n    }\n\n    /**\n     * @dev Swap with exact target.\n     * Returns a boolean value indicating whether the operation succeeded.\n     */\n    function swapWithExactTarget(address[] memory path, uint256 targetAmount, uint256 maxSupplyAmount)\n    public\n    override\n    returns (bool) {\n        for (uint i = 0; i < path.length; i++) {\n            require(path[i] != address(0), \"DEX: token is zero address\");\n        }\n        require(targetAmount != 0, \"DEX: targetAmount is zero\");\n\n        (bool success, bytes memory returnData) = precompile.call(abi.encodeWithSignature(\"swapWithExactTarget(address,address[],uint256,uint256)\", msg.sender, path, targetAmount, maxSupplyAmount));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        emit Swaped(msg.sender, path, abi.decode(returnData, (uint256)), targetAmount);\n        return true;\n    }\n\n    /**\n     * @dev Add liquidity to the trading pair.\n     * Returns a boolean value indicating whether the operation succeeded.\n     */\n    function addLiquidity(address tokenA, address tokenB, uint256 maxAmountA, uint256 maxAmountB, uint256 minShareIncrement)\n    public\n    override\n    returns (bool) {\n        require(tokenA != address(0), \"DEX: tokenA is zero address\");\n        require(tokenB != address(0), \"DEX: tokenB is zero address\");\n        require(maxAmountA != 0, \"DEX: maxAmountA is zero\");\n        require(maxAmountB != 0, \"DEX: maxAmountB is zero\");\n\n        (bool success, bytes memory returnData) = precompile.call(abi.encodeWithSignature(\"addLiquidity(address,address,address,uint256,uint256,uint256)\", msg.sender, tokenA, tokenB, maxAmountA, maxAmountB, minShareIncrement));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        emit AddedLiquidity(msg.sender, tokenA, tokenB, maxAmountA, maxAmountB);\n        return true;\n    }\n\n    /**\n     * @dev Remove liquidity from the trading pair.\n     * Returns a boolean value indicating whether the operation succeeded.\n     */\n    function removeLiquidity(address tokenA, address tokenB, uint256 removeShare, uint256 minWithdrawnA, uint256 minWithdrawnB)\n    public\n    override\n    returns (bool) {\n        require(tokenA != address(0), \"DEX: tokenA is zero address\");\n        require(tokenB != address(0), \"DEX: tokenB is zero address\");\n        require(removeShare != 0, \"DEX: removeShare is zero\");\n\n        (bool success, bytes memory returnData) = precompile.call(abi.encodeWithSignature(\"removeLiquidity(address,address,address,uint256,uint256,uint256)\", msg.sender, tokenA, tokenB, removeShare, minWithdrawnA, minWithdrawnB));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        emit RemovedLiquidity(msg.sender, tokenA, tokenB, removeShare);\n        return true;\n    }\n}\n",
  "sourcePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/DEX.sol",
  "ast": {
    "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/DEX.sol",
    "exportedSymbols": {
      "DEX": [
        581
      ],
      "IDEX": [
        711
      ]
    },
    "id": 582,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:0"
      },
      {
        "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/IDEX.sol",
        "file": "./IDEX.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 582,
        "sourceUnit": 712,
        "src": "71:20:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3,
              "name": "IDEX",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 711,
              "src": "109:4:0"
            },
            "id": 4,
            "nodeType": "InheritanceSpecifier",
            "src": "109:4:0"
          }
        ],
        "contractDependencies": [
          711
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 581,
        "linearizedBaseContracts": [
          581,
          711
        ],
        "name": "DEX",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 10,
            "mutability": "constant",
            "name": "precompile",
            "nodeType": "VariableDeclaration",
            "scope": 581,
            "src": "120:89:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "120:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030343035",
                  "id": 8,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "166:42:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x0000000000000000000000000000000000000405"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 7,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "158:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 6,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "158:7:0",
                  "typeDescriptions": {}
                }
              },
              "id": 9,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "158:51:0",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              627
            ],
            "body": {
              "id": 68,
              "nodeType": "Block",
              "src": "471:498:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 29,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13,
                          "src": "489:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 27,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "507:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 26,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "499:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 25,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "499:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 28,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "499:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "489:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 30,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "511:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 23,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "481:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 31,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "481:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32,
                  "nodeType": "ExpressionStatement",
                  "src": "481:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 39,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 34,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15,
                          "src": "559:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 37,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "577:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 36,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "569:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 35,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "569:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 38,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "569:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "559:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 40,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "581:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 33,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "551:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 41,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "551:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42,
                  "nodeType": "ExpressionStatement",
                  "src": "551:60:0"
                },
                {
                  "assignments": [
                    44,
                    46
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 68,
                      "src": "623:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 43,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "623:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 46,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 68,
                      "src": "637:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 45,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "637:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 56,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6765744c6971756964697479506f6f6c28616464726573732c6164647265737329",
                            "id": 51,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "710:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_f4f31ede01b5bd6bdda6011b904fcb70e8c0ab7490d57374c0d4894d9b9fda8c",
                              "typeString": "literal_string \"getLiquidityPool(address,address)\""
                            },
                            "value": "getLiquidityPool(address,address)"
                          },
                          {
                            "id": 52,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13,
                            "src": "747:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 53,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15,
                            "src": "755:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_f4f31ede01b5bd6bdda6011b904fcb70e8c0ab7490d57374c0d4894d9b9fda8c",
                              "typeString": "literal_string \"getLiquidityPool(address,address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 49,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "686:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 50,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "686:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 54,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "686:76:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 47,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "664:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 48,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "664:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 55,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "664:99:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "622:141:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "782:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "814:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "843:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "855:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "839:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "839:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "832:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "832:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "832:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "802:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "811:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "799:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "799:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "796:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 46,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "843:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 44,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "802:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 57,
                  "nodeType": "InlineAssembly",
                  "src": "773:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 60,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46,
                        "src": "931:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 62,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "944:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 61,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "944:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          {
                            "id": 64,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "953:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 63,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "953:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 65,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "943:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                          "typeString": "tuple(type(uint256),type(uint256))"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                          "typeString": "tuple(type(uint256),type(uint256))"
                        }
                      ],
                      "expression": {
                        "id": 58,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "920:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 59,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "920:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 66,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "920:42:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 22,
                  "id": 67,
                  "nodeType": "Return",
                  "src": "913:49:0"
                }
              ]
            },
            "documentation": {
              "id": 11,
              "nodeType": "StructuredDocumentation",
              "src": "216:124:0",
              "text": " @dev Get liquidity pool of the currency_id_a and currency_id_b.\n Returns (liquidity_a, liquidity_b)"
            },
            "functionSelector": "f4f31ede",
            "id": 69,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidityPool",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "427:8:0"
            },
            "parameters": {
              "id": 16,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "371:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "371:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "387:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "387:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "370:32:0"
            },
            "returnParameters": {
              "id": 22,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "449:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "449:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "458:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "458:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "448:18:0"
            },
            "scope": 581,
            "src": "345:624:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              636
            ],
            "body": {
              "id": 123,
              "nodeType": "Block",
              "src": "1194:497:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 86,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 81,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 72,
                          "src": "1212:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 84,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1230:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 83,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1222:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 82,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1222:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 85,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1222:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1212:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 87,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1234:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 80,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1204:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 88,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1204:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 89,
                  "nodeType": "ExpressionStatement",
                  "src": "1204:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 96,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 91,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "1282:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 94,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1300:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 93,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1292:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 92,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1292:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 95,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1292:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1282:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 97,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1304:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 90,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1274:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 98,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1274:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 99,
                  "nodeType": "ExpressionStatement",
                  "src": "1274:60:0"
                },
                {
                  "assignments": [
                    101,
                    103
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 101,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 123,
                      "src": "1346:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 100,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1346:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 103,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 123,
                      "src": "1360:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 102,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1360:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 113,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6765744c6971756964697479546f6b656e4164647265737328616464726573732c6164647265737329",
                            "id": 108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1433:43:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ffd73c4a4201e3f40728afc3a77761288b469011e9979dcfd0617c1dabc59709",
                              "typeString": "literal_string \"getLiquidityTokenAddress(address,address)\""
                            },
                            "value": "getLiquidityTokenAddress(address,address)"
                          },
                          {
                            "id": 109,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 72,
                            "src": "1478:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 110,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 74,
                            "src": "1486:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ffd73c4a4201e3f40728afc3a77761288b469011e9979dcfd0617c1dabc59709",
                              "typeString": "literal_string \"getLiquidityTokenAddress(address,address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 106,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1409:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1409:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1409:84:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 104,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "1387:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 105,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1387:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1387:107:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1345:149:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1513:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1545:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1574:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1586:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1570:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1570:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1593:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1593:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1563:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1563:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1563:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1533:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1542:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1530:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1530:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "1527:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 103,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1574:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 101,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1533:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 114,
                  "nodeType": "InlineAssembly",
                  "src": "1504:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 117,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "1662:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1675:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 118,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1675:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 120,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1674:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        }
                      ],
                      "expression": {
                        "id": 115,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "1651:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 116,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "1651:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1651:33:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 79,
                  "id": 122,
                  "nodeType": "Return",
                  "src": "1644:40:0"
                }
              ]
            },
            "documentation": {
              "id": 70,
              "nodeType": "StructuredDocumentation",
              "src": "975:93:0",
              "text": " @dev Get Liquidity token address.\n Returns (liquidity_token_address)"
            },
            "functionSelector": "ffd73c4a",
            "id": 124,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidityTokenAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 76,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1163:8:0"
            },
            "parameters": {
              "id": 75,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "1107:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1107:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 74,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "1123:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1123:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1106:32:0"
            },
            "returnParameters": {
              "id": 79,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 78,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "1185:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 77,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1184:9:0"
            },
            "scope": 581,
            "src": "1073:618:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              646
            ],
            "body": {
              "id": 191,
              "nodeType": "Block",
              "src": "1910:556:0",
              "statements": [
                {
                  "body": {
                    "id": 159,
                    "nodeType": "Block",
                    "src": "1959:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 148,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 128,
                                  "src": "1981:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 150,
                                "indexExpression": {
                                  "id": 149,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 137,
                                  "src": "1986:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1981:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 153,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2000:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 152,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1992:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 151,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1992:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1992:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1981:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2004:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 147,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "1973:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1973:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 158,
                        "nodeType": "ExpressionStatement",
                        "src": "1973:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 140,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 137,
                      "src": "1937:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 141,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "1941:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 142,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1941:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1937:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 160,
                  "initializationExpression": {
                    "assignments": [
                      137
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 137,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 160,
                        "src": "1925:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 136,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1925:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 139,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 138,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1934:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1925:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1954:3:0",
                      "subExpression": {
                        "id": 144,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 137,
                        "src": "1954:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 146,
                    "nodeType": "ExpressionStatement",
                    "src": "1954:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "1920:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 162,
                          "name": "supplyAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 130,
                          "src": "2061:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2077:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2061:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20737570706c79416d6f756e74206973207a65726f",
                        "id": 165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2080:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        },
                        "value": "DEX: supplyAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        }
                      ],
                      "id": 161,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2053:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2053:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 167,
                  "nodeType": "ExpressionStatement",
                  "src": "2053:55:0"
                },
                {
                  "assignments": [
                    169,
                    171
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 169,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 191,
                      "src": "2120:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 168,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2120:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 171,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 191,
                      "src": "2134:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 170,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2134:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 181,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "67657453776170546172676574416d6f756e7428616464726573735b5d2c75696e7432353629",
                            "id": 176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2207:40:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_4d60beb1b606b8a121888b90f2d5bafbc7169e643e053624b51ac225d2fd27b6",
                              "typeString": "literal_string \"getSwapTargetAmount(address[],uint256)\""
                            },
                            "value": "getSwapTargetAmount(address[],uint256)"
                          },
                          {
                            "id": 177,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 128,
                            "src": "2249:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 178,
                            "name": "supplyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 130,
                            "src": "2255:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_4d60beb1b606b8a121888b90f2d5bafbc7169e643e053624b51ac225d2fd27b6",
                              "typeString": "literal_string \"getSwapTargetAmount(address[],uint256)\""
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 174,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2183:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "2183:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2183:85:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 172,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "2161:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 173,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "2161:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2161:108:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2119:150:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2288:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2320:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "2349:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2361:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2345:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2345:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "2368:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2368:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2338:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2338:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2338:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "2308:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2317:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "2305:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2305:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "2302:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 171,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2349:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 169,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2308:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 182,
                  "nodeType": "InlineAssembly",
                  "src": "2279:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 185,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 171,
                        "src": "2437:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2450:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 186,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2450:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 188,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2449:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 183,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "2426:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "2426:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2426:33:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 135,
                  "id": 190,
                  "nodeType": "Return",
                  "src": "2419:40:0"
                }
              ]
            },
            "documentation": {
              "id": 125,
              "nodeType": "StructuredDocumentation",
              "src": "1698:78:0",
              "text": " @dev Get swap target amount.\n Returns (target_amount)"
            },
            "functionSelector": "4d60beb1",
            "id": 192,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSwapTargetAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 132,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1879:8:0"
            },
            "parameters": {
              "id": 131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 128,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 192,
                  "src": "1810:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 126,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1810:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 127,
                    "nodeType": "ArrayTypeName",
                    "src": "1810:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 130,
                  "mutability": "mutable",
                  "name": "supplyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 192,
                  "src": "1833:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1833:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1809:45:0"
            },
            "returnParameters": {
              "id": 135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 134,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 192,
                  "src": "1901:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1900:9:0"
            },
            "scope": 581,
            "src": "1781:685:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              656
            ],
            "body": {
              "id": 259,
              "nodeType": "Block",
              "src": "2684:556:0",
              "statements": [
                {
                  "body": {
                    "id": 227,
                    "nodeType": "Block",
                    "src": "2733:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 216,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 196,
                                  "src": "2755:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 218,
                                "indexExpression": {
                                  "id": 217,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 205,
                                  "src": "2760:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2755:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 221,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2774:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 220,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2766:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 219,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2766:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2766:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2755:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2778:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 215,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "2747:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2747:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 226,
                        "nodeType": "ExpressionStatement",
                        "src": "2747:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 208,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 205,
                      "src": "2711:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 209,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 196,
                        "src": "2715:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2715:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2711:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 228,
                  "initializationExpression": {
                    "assignments": [
                      205
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 205,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 228,
                        "src": "2699:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2699:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 207,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2708:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2699:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 213,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2728:3:0",
                      "subExpression": {
                        "id": 212,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 205,
                        "src": "2728:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 214,
                    "nodeType": "ExpressionStatement",
                    "src": "2728:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "2694:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 230,
                          "name": "targetAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 198,
                          "src": "2835:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2851:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2835:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746172676574416d6f756e74206973207a65726f",
                        "id": 233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2854:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        },
                        "value": "DEX: targetAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        }
                      ],
                      "id": 229,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2827:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2827:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 235,
                  "nodeType": "ExpressionStatement",
                  "src": "2827:55:0"
                },
                {
                  "assignments": [
                    237,
                    239
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 237,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 259,
                      "src": "2894:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 236,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2894:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 239,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 259,
                      "src": "2908:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 238,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2908:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 249,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "67657453776170537570706c79416d6f756e7428616464726573735b5d2c75696e7432353629",
                            "id": 244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2981:40:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_dbcd19a23ba1165c03b4f27f6e0475f129bbf01f445ab790016a51b787818c10",
                              "typeString": "literal_string \"getSwapSupplyAmount(address[],uint256)\""
                            },
                            "value": "getSwapSupplyAmount(address[],uint256)"
                          },
                          {
                            "id": 245,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 196,
                            "src": "3023:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 246,
                            "name": "targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 198,
                            "src": "3029:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_dbcd19a23ba1165c03b4f27f6e0475f129bbf01f445ab790016a51b787818c10",
                              "typeString": "literal_string \"getSwapSupplyAmount(address[],uint256)\""
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 242,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2957:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "2957:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2957:85:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 240,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "2935:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "2935:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2935:108:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2893:150:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3062:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3094:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "3123:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3135:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3119:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3119:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "3142:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3142:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "3112:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3112:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3112:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "3082:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3091:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "3079:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3079:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "3076:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 239,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3123:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 237,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3082:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 250,
                  "nodeType": "InlineAssembly",
                  "src": "3053:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 253,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 239,
                        "src": "3211:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3224:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 254,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3224:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 256,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3223:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 251,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3200:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "3200:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3200:33:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 203,
                  "id": 258,
                  "nodeType": "Return",
                  "src": "3193:40:0"
                }
              ]
            },
            "documentation": {
              "id": 193,
              "nodeType": "StructuredDocumentation",
              "src": "2472:78:0",
              "text": " @dev Get swap supply amount.\n Returns (supply_amount)"
            },
            "functionSelector": "dbcd19a2",
            "id": 260,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSwapSupplyAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 200,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2653:8:0"
            },
            "parameters": {
              "id": 199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 196,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "2584:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 194,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2584:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 195,
                    "nodeType": "ArrayTypeName",
                    "src": "2584:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 198,
                  "mutability": "mutable",
                  "name": "targetAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "2607:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2607:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2583:45:0"
            },
            "returnParameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 202,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "2675:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2675:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2674:9:0"
            },
            "scope": 581,
            "src": "2555:685:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              668
            ],
            "body": {
              "id": 340,
              "nodeType": "Block",
              "src": "3515:654:0",
              "statements": [
                {
                  "body": {
                    "id": 297,
                    "nodeType": "Block",
                    "src": "3564:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 286,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 264,
                                  "src": "3586:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 288,
                                "indexExpression": {
                                  "id": 287,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 275,
                                  "src": "3591:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3586:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 291,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3605:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 290,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3597:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 289,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3597:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3597:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "3586:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3609:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 285,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3578:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3578:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 296,
                        "nodeType": "ExpressionStatement",
                        "src": "3578:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 278,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 275,
                      "src": "3542:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 279,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 264,
                        "src": "3546:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3546:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3542:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 298,
                  "initializationExpression": {
                    "assignments": [
                      275
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 275,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 298,
                        "src": "3530:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 274,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3530:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 277,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3539:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3530:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3559:3:0",
                      "subExpression": {
                        "id": 282,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 275,
                        "src": "3559:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 284,
                    "nodeType": "ExpressionStatement",
                    "src": "3559:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "3525:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 300,
                          "name": "supplyAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 266,
                          "src": "3666:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3682:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3666:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20737570706c79416d6f756e74206973207a65726f",
                        "id": 303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3685:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        },
                        "value": "DEX: supplyAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        }
                      ],
                      "id": 299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3658:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3658:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 305,
                  "nodeType": "ExpressionStatement",
                  "src": "3658:55:0"
                },
                {
                  "assignments": [
                    307,
                    309
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 307,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 340,
                      "src": "3725:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 306,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3725:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 309,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 340,
                      "src": "3739:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 308,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3739:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 322,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "73776170576974684578616374537570706c7928616464726573732c616464726573735b5d2c75696e743235362c75696e7432353629",
                            "id": 314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3806:56:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_579baa184c8ddcb5381eff7c96b2a2ecf2974cbc63fccade7cf347b10b53f0ed",
                              "typeString": "literal_string \"swapWithExactSupply(address,address[],uint256,uint256)\""
                            },
                            "value": "swapWithExactSupply(address,address[],uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 315,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "3864:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "3864:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 317,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 264,
                            "src": "3876:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 318,
                            "name": "supplyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 266,
                            "src": "3882:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 319,
                            "name": "minTargetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 268,
                            "src": "3896:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_579baa184c8ddcb5381eff7c96b2a2ecf2974cbc63fccade7cf347b10b53f0ed",
                              "typeString": "literal_string \"swapWithExactSupply(address,address[],uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 312,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "3782:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "3782:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3782:130:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 310,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "3766:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "3766:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3766:147:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3724:189:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3932:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3964:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "3993:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4005:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3989:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3989:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "4012:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4012:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "3982:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3982:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3982:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "3952:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3961:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "3949:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3949:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "3946:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 309,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3993:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 307,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3952:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 323,
                  "nodeType": "InlineAssembly",
                  "src": "3923:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 325,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4075:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4075:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 327,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 264,
                        "src": "4087:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "id": 328,
                        "name": "supplyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 266,
                        "src": "4093:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 331,
                            "name": "returnData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 309,
                            "src": "4118:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "components": [
                              {
                                "id": 333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4131:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 332,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4131:7:0",
                                  "typeDescriptions": {}
                                }
                              }
                            ],
                            "id": 334,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4130:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "expression": {
                            "id": 329,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "4107:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "decode",
                          "nodeType": "MemberAccess",
                          "src": "4107:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4107:33:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 324,
                      "name": "Swaped",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 594,
                      "src": "4068:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address[] memory,uint256,uint256)"
                      }
                    },
                    "id": 336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4068:73:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 337,
                  "nodeType": "EmitStatement",
                  "src": "4063:78:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4158:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 273,
                  "id": 339,
                  "nodeType": "Return",
                  "src": "4151:11:0"
                }
              ]
            },
            "documentation": {
              "id": 261,
              "nodeType": "StructuredDocumentation",
              "src": "3246:122:0",
              "text": " @dev Swap with exact supply.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "6fc4b4e5",
            "id": 341,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swapWithExactSupply",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 270,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3487:8:0"
            },
            "parameters": {
              "id": 269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 264,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3402:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 262,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3402:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 263,
                    "nodeType": "ArrayTypeName",
                    "src": "3402:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 266,
                  "mutability": "mutable",
                  "name": "supplyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3425:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3425:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 268,
                  "mutability": "mutable",
                  "name": "minTargetAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3447:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 267,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3447:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3401:70:0"
            },
            "returnParameters": {
              "id": 273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 272,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3509:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 271,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3509:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3508:6:0"
            },
            "scope": 581,
            "src": "3373:796:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              680
            ],
            "body": {
              "id": 421,
              "nodeType": "Block",
              "src": "4444:654:0",
              "statements": [
                {
                  "body": {
                    "id": 378,
                    "nodeType": "Block",
                    "src": "4493:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 367,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 345,
                                  "src": "4515:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 369,
                                "indexExpression": {
                                  "id": 368,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 356,
                                  "src": "4520:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4515:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 372,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4534:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 371,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4526:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 370,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4526:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 373,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4526:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4515:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4538:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 366,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "4507:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4507:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 377,
                        "nodeType": "ExpressionStatement",
                        "src": "4507:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 359,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 356,
                      "src": "4471:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 360,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "4475:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 361,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "4475:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4471:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 379,
                  "initializationExpression": {
                    "assignments": [
                      356
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 379,
                        "src": "4459:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4459:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 358,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4468:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4459:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4488:3:0",
                      "subExpression": {
                        "id": 363,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 356,
                        "src": "4488:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 365,
                    "nodeType": "ExpressionStatement",
                    "src": "4488:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "4454:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 381,
                          "name": "targetAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 347,
                          "src": "4595:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4611:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4595:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746172676574416d6f756e74206973207a65726f",
                        "id": 384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4614:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        },
                        "value": "DEX: targetAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        }
                      ],
                      "id": 380,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4587:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4587:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 386,
                  "nodeType": "ExpressionStatement",
                  "src": "4587:55:0"
                },
                {
                  "assignments": [
                    388,
                    390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 388,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 421,
                      "src": "4654:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 387,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4654:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 390,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 421,
                      "src": "4668:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 389,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4668:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 403,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "7377617057697468457861637454617267657428616464726573732c616464726573735b5d2c75696e743235362c75696e7432353629",
                            "id": 395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4735:56:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9782ac816caa94485a39864ea3a2ceafbf4bd927a06d8d084d63a566898ab7b3",
                              "typeString": "literal_string \"swapWithExactTarget(address,address[],uint256,uint256)\""
                            },
                            "value": "swapWithExactTarget(address,address[],uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 396,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "4793:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "4793:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 398,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "4805:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 399,
                            "name": "targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 347,
                            "src": "4811:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 400,
                            "name": "maxSupplyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 349,
                            "src": "4825:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_9782ac816caa94485a39864ea3a2ceafbf4bd927a06d8d084d63a566898ab7b3",
                              "typeString": "literal_string \"swapWithExactTarget(address,address[],uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 393,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "4711:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "4711:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4711:130:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 391,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "4695:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "4695:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4695:147:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4653:189:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "4861:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4893:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "4922:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4934:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4918:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4918:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "4941:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4941:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "4911:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4911:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4911:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "4881:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4890:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "4878:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4878:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "4875:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 390,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4922:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 388,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4881:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 404,
                  "nodeType": "InlineAssembly",
                  "src": "4852:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 406,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "5004:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5004:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 408,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "5016:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 411,
                            "name": "returnData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 390,
                            "src": "5033:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "components": [
                              {
                                "id": 413,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5046:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 412,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5046:7:0",
                                  "typeDescriptions": {}
                                }
                              }
                            ],
                            "id": 414,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5045:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "expression": {
                            "id": 409,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "5022:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "decode",
                          "nodeType": "MemberAccess",
                          "src": "5022:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5022:33:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 416,
                        "name": "targetAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 347,
                        "src": "5057:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 405,
                      "name": "Swaped",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 594,
                      "src": "4997:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address[] memory,uint256,uint256)"
                      }
                    },
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4997:73:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 418,
                  "nodeType": "EmitStatement",
                  "src": "4992:78:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5087:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 354,
                  "id": 420,
                  "nodeType": "Return",
                  "src": "5080:11:0"
                }
              ]
            },
            "documentation": {
              "id": 342,
              "nodeType": "StructuredDocumentation",
              "src": "4175:122:0",
              "text": " @dev Swap with exact target.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "3d8d9620",
            "id": 422,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swapWithExactTarget",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 351,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4416:8:0"
            },
            "parameters": {
              "id": 350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 345,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4331:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 343,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4331:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 344,
                    "nodeType": "ArrayTypeName",
                    "src": "4331:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 347,
                  "mutability": "mutable",
                  "name": "targetAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4354:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4354:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 349,
                  "mutability": "mutable",
                  "name": "maxSupplyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4376:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4376:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4330:70:0"
            },
            "returnParameters": {
              "id": 354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 353,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4438:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 352,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4438:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4437:6:0"
            },
            "scope": 581,
            "src": "4302:796:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              695
            ],
            "body": {
              "id": 504,
              "nodeType": "Block",
              "src": "5406:740:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 440,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 425,
                          "src": "5424:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5442:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5434:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 441,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5434:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5434:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5424:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5446:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 439,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5416:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5416:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 448,
                  "nodeType": "ExpressionStatement",
                  "src": "5416:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 450,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 427,
                          "src": "5494:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5512:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 452,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5504:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 451,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5504:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5504:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5494:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5516:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 449,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5486:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5486:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 458,
                  "nodeType": "ExpressionStatement",
                  "src": "5486:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 460,
                          "name": "maxAmountA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 429,
                          "src": "5564:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5578:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5564:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a206d6178416d6f756e7441206973207a65726f",
                        "id": 463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5581:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392",
                          "typeString": "literal_string \"DEX: maxAmountA is zero\""
                        },
                        "value": "DEX: maxAmountA is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392",
                          "typeString": "literal_string \"DEX: maxAmountA is zero\""
                        }
                      ],
                      "id": 459,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5556:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5556:51:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 465,
                  "nodeType": "ExpressionStatement",
                  "src": "5556:51:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 467,
                          "name": "maxAmountB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 431,
                          "src": "5625:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5639:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5625:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a206d6178416d6f756e7442206973207a65726f",
                        "id": 470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5642:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab",
                          "typeString": "literal_string \"DEX: maxAmountB is zero\""
                        },
                        "value": "DEX: maxAmountB is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab",
                          "typeString": "literal_string \"DEX: maxAmountB is zero\""
                        }
                      ],
                      "id": 466,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5617:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5617:51:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 472,
                  "nodeType": "ExpressionStatement",
                  "src": "5617:51:0"
                },
                {
                  "assignments": [
                    474,
                    476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 474,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 504,
                      "src": "5680:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 473,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5680:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 476,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 504,
                      "src": "5694:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 475,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "5694:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 491,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6164644c697175696469747928616464726573732c616464726573732c616464726573732c75696e743235362c75696e743235362c75696e7432353629",
                            "id": 481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5761:63:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_67088d59021160826815af242575a1167b4d36dadd782ad9c9cc6375758daa99",
                              "typeString": "literal_string \"addLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            "value": "addLiquidity(address,address,address,uint256,uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 482,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "5826:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "5826:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 484,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 425,
                            "src": "5838:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 485,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 427,
                            "src": "5846:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 486,
                            "name": "maxAmountA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 429,
                            "src": "5854:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 487,
                            "name": "maxAmountB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 431,
                            "src": "5866:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 488,
                            "name": "minShareIncrement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 433,
                            "src": "5878:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_67088d59021160826815af242575a1167b4d36dadd782ad9c9cc6375758daa99",
                              "typeString": "literal_string \"addLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 479,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "5737:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "5737:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5737:159:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 477,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "5721:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "5721:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5721:176:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5679:218:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5916:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5948:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "5977:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5989:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5973:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5973:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "5996:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5996:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "5966:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5966:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5966:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "5936:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5945:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "5933:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5933:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "5930:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 476,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5977:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 474,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5936:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 492,
                  "nodeType": "InlineAssembly",
                  "src": "5907:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 494,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "6067:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6067:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 496,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 425,
                        "src": "6079:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 497,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 427,
                        "src": "6087:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 498,
                        "name": "maxAmountA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 429,
                        "src": "6095:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 499,
                        "name": "maxAmountB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 431,
                        "src": "6107:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 493,
                      "name": "AddedLiquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 606,
                      "src": "6052:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6052:66:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 501,
                  "nodeType": "EmitStatement",
                  "src": "6047:71:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6135:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 438,
                  "id": 503,
                  "nodeType": "Return",
                  "src": "6128:11:0"
                }
              ]
            },
            "documentation": {
              "id": 423,
              "nodeType": "StructuredDocumentation",
              "src": "5104:133:0",
              "text": " @dev Add liquidity to the trading pair.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "91c98a2a",
            "id": 505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 435,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5378:8:0"
            },
            "parameters": {
              "id": 434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 425,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5264:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5264:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 427,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5280:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5280:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 429,
                  "mutability": "mutable",
                  "name": "maxAmountA",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5296:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 428,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5296:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 431,
                  "mutability": "mutable",
                  "name": "maxAmountB",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5316:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5316:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 433,
                  "mutability": "mutable",
                  "name": "minShareIncrement",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5336:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5336:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5263:99:0"
            },
            "returnParameters": {
              "id": 438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 437,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5400:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 436,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5400:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5399:6:0"
            },
            "scope": 581,
            "src": "5242:904:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              710
            ],
            "body": {
              "id": 579,
              "nodeType": "Block",
              "src": "6462:675:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 523,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 508,
                          "src": "6480:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 526,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6498:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6490:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 524,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6490:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6490:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6480:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6502:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 522,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6472:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6472:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 531,
                  "nodeType": "ExpressionStatement",
                  "src": "6472:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 533,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 510,
                          "src": "6550:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6568:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6560:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 534,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6560:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6560:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6550:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6572:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 532,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6542:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6542:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 541,
                  "nodeType": "ExpressionStatement",
                  "src": "6542:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 543,
                          "name": "removeShare",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 512,
                          "src": "6620:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6635:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6620:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a2072656d6f76655368617265206973207a65726f",
                        "id": 546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6638:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322",
                          "typeString": "literal_string \"DEX: removeShare is zero\""
                        },
                        "value": "DEX: removeShare is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322",
                          "typeString": "literal_string \"DEX: removeShare is zero\""
                        }
                      ],
                      "id": 542,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6612:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6612:53:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 548,
                  "nodeType": "ExpressionStatement",
                  "src": "6612:53:0"
                },
                {
                  "assignments": [
                    550,
                    552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 550,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 579,
                      "src": "6677:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 549,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6677:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 552,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 579,
                      "src": "6691:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 551,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6691:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 567,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "72656d6f76654c697175696469747928616464726573732c616464726573732c616464726573732c75696e743235362c75696e743235362c75696e7432353629",
                            "id": 557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6758:66:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_35315332d72d685887f38197e4711e35b747586742ed6b783ca8c5ec1aeb4ead",
                              "typeString": "literal_string \"removeLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            "value": "removeLiquidity(address,address,address,uint256,uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 558,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "6826:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "6826:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 560,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 508,
                            "src": "6838:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 561,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 510,
                            "src": "6846:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 562,
                            "name": "removeShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 512,
                            "src": "6854:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 563,
                            "name": "minWithdrawnA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 514,
                            "src": "6867:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 564,
                            "name": "minWithdrawnB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 516,
                            "src": "6882:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_35315332d72d685887f38197e4711e35b747586742ed6b783ca8c5ec1aeb4ead",
                              "typeString": "literal_string \"removeLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 555,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "6734:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "6734:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6734:162:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 553,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "6718:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "6718:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6718:179:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6676:221:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "6916:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6948:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "6977:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6989:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6973:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6973:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "6996:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6996:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6966:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6966:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6966:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "6936:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6945:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "6933:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6933:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "6930:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 552,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6977:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 550,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6936:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 568,
                  "nodeType": "InlineAssembly",
                  "src": "6907:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 570,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "7069:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7069:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 572,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 508,
                        "src": "7081:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 573,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 510,
                        "src": "7089:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 574,
                        "name": "removeShare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 512,
                        "src": "7097:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 569,
                      "name": "RemovedLiquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 616,
                      "src": "7052:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7052:57:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 576,
                  "nodeType": "EmitStatement",
                  "src": "7047:62:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7126:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 521,
                  "id": 578,
                  "nodeType": "Return",
                  "src": "7119:11:0"
                }
              ]
            },
            "documentation": {
              "id": 506,
              "nodeType": "StructuredDocumentation",
              "src": "6152:138:0",
              "text": " @dev Remove liquidity from the trading pair.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "e2dc85dc",
            "id": 580,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 518,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6434:8:0"
            },
            "parameters": {
              "id": 517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 508,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6320:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 507,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6320:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 510,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6336:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 509,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6336:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 512,
                  "mutability": "mutable",
                  "name": "removeShare",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6352:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6352:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 514,
                  "mutability": "mutable",
                  "name": "minWithdrawnA",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6373:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6373:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 516,
                  "mutability": "mutable",
                  "name": "minWithdrawnB",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6396:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6396:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6319:99:0"
            },
            "returnParameters": {
              "id": 521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 520,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6456:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 519,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6456:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6455:6:0"
            },
            "scope": 581,
            "src": "6295:842:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 582,
        "src": "93:7046:0"
      }
    ],
    "src": "46:7094:0"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/DEX.sol",
    "exportedSymbols": {
      "DEX": [
        581
      ],
      "IDEX": [
        711
      ]
    },
    "id": 582,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:0"
      },
      {
        "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/dex/IDEX.sol",
        "file": "./IDEX.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 582,
        "sourceUnit": 712,
        "src": "71:20:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3,
              "name": "IDEX",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 711,
              "src": "109:4:0"
            },
            "id": 4,
            "nodeType": "InheritanceSpecifier",
            "src": "109:4:0"
          }
        ],
        "contractDependencies": [
          711
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 581,
        "linearizedBaseContracts": [
          581,
          711
        ],
        "name": "DEX",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 10,
            "mutability": "constant",
            "name": "precompile",
            "nodeType": "VariableDeclaration",
            "scope": 581,
            "src": "120:89:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "120:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030343035",
                  "id": 8,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "166:42:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x0000000000000000000000000000000000000405"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 7,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "158:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 6,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "158:7:0",
                  "typeDescriptions": {}
                }
              },
              "id": 9,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "158:51:0",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              627
            ],
            "body": {
              "id": 68,
              "nodeType": "Block",
              "src": "471:498:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 29,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13,
                          "src": "489:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 27,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "507:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 26,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "499:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 25,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "499:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 28,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "499:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "489:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 30,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "511:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 23,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "481:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 31,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "481:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32,
                  "nodeType": "ExpressionStatement",
                  "src": "481:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 39,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 34,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15,
                          "src": "559:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 37,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "577:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 36,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "569:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 35,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "569:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 38,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "569:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "559:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 40,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "581:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 33,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "551:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 41,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "551:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42,
                  "nodeType": "ExpressionStatement",
                  "src": "551:60:0"
                },
                {
                  "assignments": [
                    44,
                    46
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 68,
                      "src": "623:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 43,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "623:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 46,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 68,
                      "src": "637:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 45,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "637:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 56,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6765744c6971756964697479506f6f6c28616464726573732c6164647265737329",
                            "id": 51,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "710:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_f4f31ede01b5bd6bdda6011b904fcb70e8c0ab7490d57374c0d4894d9b9fda8c",
                              "typeString": "literal_string \"getLiquidityPool(address,address)\""
                            },
                            "value": "getLiquidityPool(address,address)"
                          },
                          {
                            "id": 52,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13,
                            "src": "747:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 53,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15,
                            "src": "755:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_f4f31ede01b5bd6bdda6011b904fcb70e8c0ab7490d57374c0d4894d9b9fda8c",
                              "typeString": "literal_string \"getLiquidityPool(address,address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 49,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "686:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 50,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "686:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 54,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "686:76:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 47,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "664:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 48,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "664:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 55,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "664:99:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "622:141:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "782:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "814:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "843:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "855:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "839:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "839:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "832:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "832:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "832:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "802:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "811:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "799:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "799:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "796:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 46,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "843:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 44,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "802:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 57,
                  "nodeType": "InlineAssembly",
                  "src": "773:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 60,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46,
                        "src": "931:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 62,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "944:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 61,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "944:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          {
                            "id": 64,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "953:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 63,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "953:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 65,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "943:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                          "typeString": "tuple(type(uint256),type(uint256))"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                          "typeString": "tuple(type(uint256),type(uint256))"
                        }
                      ],
                      "expression": {
                        "id": 58,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "920:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 59,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "920:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 66,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "920:42:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 22,
                  "id": 67,
                  "nodeType": "Return",
                  "src": "913:49:0"
                }
              ]
            },
            "documentation": {
              "id": 11,
              "nodeType": "StructuredDocumentation",
              "src": "216:124:0",
              "text": " @dev Get liquidity pool of the currency_id_a and currency_id_b.\n Returns (liquidity_a, liquidity_b)"
            },
            "functionSelector": "f4f31ede",
            "id": 69,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidityPool",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "427:8:0"
            },
            "parameters": {
              "id": 16,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "371:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "371:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "387:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "387:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "370:32:0"
            },
            "returnParameters": {
              "id": 22,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "449:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "449:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 69,
                  "src": "458:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "458:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "448:18:0"
            },
            "scope": 581,
            "src": "345:624:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              636
            ],
            "body": {
              "id": 123,
              "nodeType": "Block",
              "src": "1194:497:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 86,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 81,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 72,
                          "src": "1212:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 84,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1230:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 83,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1222:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 82,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1222:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 85,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1222:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1212:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 87,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1234:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 80,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1204:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 88,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1204:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 89,
                  "nodeType": "ExpressionStatement",
                  "src": "1204:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 96,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 91,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 74,
                          "src": "1282:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 94,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1300:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 93,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1292:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 92,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1292:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 95,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1292:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1282:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 97,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1304:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 90,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1274:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 98,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1274:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 99,
                  "nodeType": "ExpressionStatement",
                  "src": "1274:60:0"
                },
                {
                  "assignments": [
                    101,
                    103
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 101,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 123,
                      "src": "1346:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 100,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1346:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 103,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 123,
                      "src": "1360:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 102,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1360:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 113,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6765744c6971756964697479546f6b656e4164647265737328616464726573732c6164647265737329",
                            "id": 108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1433:43:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ffd73c4a4201e3f40728afc3a77761288b469011e9979dcfd0617c1dabc59709",
                              "typeString": "literal_string \"getLiquidityTokenAddress(address,address)\""
                            },
                            "value": "getLiquidityTokenAddress(address,address)"
                          },
                          {
                            "id": 109,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 72,
                            "src": "1478:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 110,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 74,
                            "src": "1486:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ffd73c4a4201e3f40728afc3a77761288b469011e9979dcfd0617c1dabc59709",
                              "typeString": "literal_string \"getLiquidityTokenAddress(address,address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 106,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1409:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1409:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1409:84:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 104,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "1387:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 105,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1387:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1387:107:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1345:149:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1513:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1545:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1574:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1586:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1570:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1570:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1593:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1593:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1563:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1563:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1563:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1533:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1542:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1530:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1530:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "1527:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 103,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1574:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 101,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1533:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 114,
                  "nodeType": "InlineAssembly",
                  "src": "1504:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 117,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "1662:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1675:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 118,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1675:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 120,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1674:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        }
                      ],
                      "expression": {
                        "id": 115,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "1651:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 116,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "1651:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1651:33:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 79,
                  "id": 122,
                  "nodeType": "Return",
                  "src": "1644:40:0"
                }
              ]
            },
            "documentation": {
              "id": 70,
              "nodeType": "StructuredDocumentation",
              "src": "975:93:0",
              "text": " @dev Get Liquidity token address.\n Returns (liquidity_token_address)"
            },
            "functionSelector": "ffd73c4a",
            "id": 124,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidityTokenAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 76,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1163:8:0"
            },
            "parameters": {
              "id": 75,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "1107:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1107:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 74,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "1123:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 73,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1123:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1106:32:0"
            },
            "returnParameters": {
              "id": 79,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 78,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 124,
                  "src": "1185:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 77,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1184:9:0"
            },
            "scope": 581,
            "src": "1073:618:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              646
            ],
            "body": {
              "id": 191,
              "nodeType": "Block",
              "src": "1910:556:0",
              "statements": [
                {
                  "body": {
                    "id": 159,
                    "nodeType": "Block",
                    "src": "1959:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 148,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 128,
                                  "src": "1981:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 150,
                                "indexExpression": {
                                  "id": 149,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 137,
                                  "src": "1986:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1981:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 153,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2000:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 152,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1992:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 151,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1992:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1992:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1981:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2004:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 147,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "1973:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1973:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 158,
                        "nodeType": "ExpressionStatement",
                        "src": "1973:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 140,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 137,
                      "src": "1937:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 141,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 128,
                        "src": "1941:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 142,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1941:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1937:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 160,
                  "initializationExpression": {
                    "assignments": [
                      137
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 137,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 160,
                        "src": "1925:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 136,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1925:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 139,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 138,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1934:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1925:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1954:3:0",
                      "subExpression": {
                        "id": 144,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 137,
                        "src": "1954:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 146,
                    "nodeType": "ExpressionStatement",
                    "src": "1954:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "1920:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 162,
                          "name": "supplyAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 130,
                          "src": "2061:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2077:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2061:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20737570706c79416d6f756e74206973207a65726f",
                        "id": 165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2080:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        },
                        "value": "DEX: supplyAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        }
                      ],
                      "id": 161,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2053:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2053:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 167,
                  "nodeType": "ExpressionStatement",
                  "src": "2053:55:0"
                },
                {
                  "assignments": [
                    169,
                    171
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 169,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 191,
                      "src": "2120:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 168,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2120:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 171,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 191,
                      "src": "2134:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 170,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2134:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 181,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "67657453776170546172676574416d6f756e7428616464726573735b5d2c75696e7432353629",
                            "id": 176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2207:40:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_4d60beb1b606b8a121888b90f2d5bafbc7169e643e053624b51ac225d2fd27b6",
                              "typeString": "literal_string \"getSwapTargetAmount(address[],uint256)\""
                            },
                            "value": "getSwapTargetAmount(address[],uint256)"
                          },
                          {
                            "id": 177,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 128,
                            "src": "2249:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 178,
                            "name": "supplyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 130,
                            "src": "2255:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_4d60beb1b606b8a121888b90f2d5bafbc7169e643e053624b51ac225d2fd27b6",
                              "typeString": "literal_string \"getSwapTargetAmount(address[],uint256)\""
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 174,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2183:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "2183:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2183:85:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 172,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "2161:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 173,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "2161:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2161:108:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2119:150:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2288:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2320:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "2349:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2361:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2345:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2345:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "2368:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2368:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2338:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2338:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2338:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "2308:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2317:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "2305:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2305:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "2302:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 171,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2349:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 169,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2308:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 182,
                  "nodeType": "InlineAssembly",
                  "src": "2279:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 185,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 171,
                        "src": "2437:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2450:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 186,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2450:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 188,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2449:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 183,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "2426:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "2426:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2426:33:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 135,
                  "id": 190,
                  "nodeType": "Return",
                  "src": "2419:40:0"
                }
              ]
            },
            "documentation": {
              "id": 125,
              "nodeType": "StructuredDocumentation",
              "src": "1698:78:0",
              "text": " @dev Get swap target amount.\n Returns (target_amount)"
            },
            "functionSelector": "4d60beb1",
            "id": 192,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSwapTargetAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 132,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1879:8:0"
            },
            "parameters": {
              "id": 131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 128,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 192,
                  "src": "1810:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 126,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1810:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 127,
                    "nodeType": "ArrayTypeName",
                    "src": "1810:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 130,
                  "mutability": "mutable",
                  "name": "supplyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 192,
                  "src": "1833:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1833:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1809:45:0"
            },
            "returnParameters": {
              "id": 135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 134,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 192,
                  "src": "1901:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1900:9:0"
            },
            "scope": 581,
            "src": "1781:685:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              656
            ],
            "body": {
              "id": 259,
              "nodeType": "Block",
              "src": "2684:556:0",
              "statements": [
                {
                  "body": {
                    "id": 227,
                    "nodeType": "Block",
                    "src": "2733:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 216,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 196,
                                  "src": "2755:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 218,
                                "indexExpression": {
                                  "id": 217,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 205,
                                  "src": "2760:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2755:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 221,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2774:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 220,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2766:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 219,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2766:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2766:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2755:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2778:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 215,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "2747:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2747:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 226,
                        "nodeType": "ExpressionStatement",
                        "src": "2747:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 208,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 205,
                      "src": "2711:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 209,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 196,
                        "src": "2715:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2715:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2711:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 228,
                  "initializationExpression": {
                    "assignments": [
                      205
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 205,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 228,
                        "src": "2699:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2699:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 207,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2708:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2699:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 213,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2728:3:0",
                      "subExpression": {
                        "id": 212,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 205,
                        "src": "2728:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 214,
                    "nodeType": "ExpressionStatement",
                    "src": "2728:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "2694:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 230,
                          "name": "targetAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 198,
                          "src": "2835:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2851:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2835:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746172676574416d6f756e74206973207a65726f",
                        "id": 233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2854:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        },
                        "value": "DEX: targetAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        }
                      ],
                      "id": 229,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2827:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2827:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 235,
                  "nodeType": "ExpressionStatement",
                  "src": "2827:55:0"
                },
                {
                  "assignments": [
                    237,
                    239
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 237,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 259,
                      "src": "2894:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 236,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2894:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 239,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 259,
                      "src": "2908:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 238,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2908:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 249,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "67657453776170537570706c79416d6f756e7428616464726573735b5d2c75696e7432353629",
                            "id": 244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2981:40:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_dbcd19a23ba1165c03b4f27f6e0475f129bbf01f445ab790016a51b787818c10",
                              "typeString": "literal_string \"getSwapSupplyAmount(address[],uint256)\""
                            },
                            "value": "getSwapSupplyAmount(address[],uint256)"
                          },
                          {
                            "id": 245,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 196,
                            "src": "3023:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 246,
                            "name": "targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 198,
                            "src": "3029:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_dbcd19a23ba1165c03b4f27f6e0475f129bbf01f445ab790016a51b787818c10",
                              "typeString": "literal_string \"getSwapSupplyAmount(address[],uint256)\""
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 242,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2957:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "2957:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2957:85:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 240,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "2935:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "2935:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2935:108:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2893:150:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3062:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3094:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "3123:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3135:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3119:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3119:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "3142:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3142:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "3112:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3112:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3112:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "3082:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3091:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "3079:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3079:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "3076:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 239,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3123:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 237,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3082:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 250,
                  "nodeType": "InlineAssembly",
                  "src": "3053:130:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 253,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 239,
                        "src": "3211:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3224:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 254,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3224:7:0",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 256,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3223:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 251,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3200:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "3200:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3200:33:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 203,
                  "id": 258,
                  "nodeType": "Return",
                  "src": "3193:40:0"
                }
              ]
            },
            "documentation": {
              "id": 193,
              "nodeType": "StructuredDocumentation",
              "src": "2472:78:0",
              "text": " @dev Get swap supply amount.\n Returns (supply_amount)"
            },
            "functionSelector": "dbcd19a2",
            "id": 260,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSwapSupplyAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 200,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2653:8:0"
            },
            "parameters": {
              "id": 199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 196,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "2584:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 194,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2584:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 195,
                    "nodeType": "ArrayTypeName",
                    "src": "2584:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 198,
                  "mutability": "mutable",
                  "name": "targetAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "2607:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2607:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2583:45:0"
            },
            "returnParameters": {
              "id": 203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 202,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "2675:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2675:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2674:9:0"
            },
            "scope": 581,
            "src": "2555:685:0",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              668
            ],
            "body": {
              "id": 340,
              "nodeType": "Block",
              "src": "3515:654:0",
              "statements": [
                {
                  "body": {
                    "id": 297,
                    "nodeType": "Block",
                    "src": "3564:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 286,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 264,
                                  "src": "3586:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 288,
                                "indexExpression": {
                                  "id": 287,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 275,
                                  "src": "3591:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3586:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 291,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3605:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 290,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3597:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 289,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3597:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3597:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "3586:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3609:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 285,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3578:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3578:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 296,
                        "nodeType": "ExpressionStatement",
                        "src": "3578:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 278,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 275,
                      "src": "3542:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 279,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 264,
                        "src": "3546:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3546:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3542:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 298,
                  "initializationExpression": {
                    "assignments": [
                      275
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 275,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 298,
                        "src": "3530:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 274,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3530:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 277,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3539:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3530:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3559:3:0",
                      "subExpression": {
                        "id": 282,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 275,
                        "src": "3559:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 284,
                    "nodeType": "ExpressionStatement",
                    "src": "3559:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "3525:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 300,
                          "name": "supplyAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 266,
                          "src": "3666:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3682:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3666:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20737570706c79416d6f756e74206973207a65726f",
                        "id": 303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3685:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        },
                        "value": "DEX: supplyAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c3ea219c58afa85052acdc5a52357285e055ef5796082c7cd4a72a1e94860dd",
                          "typeString": "literal_string \"DEX: supplyAmount is zero\""
                        }
                      ],
                      "id": 299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3658:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3658:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 305,
                  "nodeType": "ExpressionStatement",
                  "src": "3658:55:0"
                },
                {
                  "assignments": [
                    307,
                    309
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 307,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 340,
                      "src": "3725:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 306,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3725:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 309,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 340,
                      "src": "3739:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 308,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3739:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 322,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "73776170576974684578616374537570706c7928616464726573732c616464726573735b5d2c75696e743235362c75696e7432353629",
                            "id": 314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3806:56:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_579baa184c8ddcb5381eff7c96b2a2ecf2974cbc63fccade7cf347b10b53f0ed",
                              "typeString": "literal_string \"swapWithExactSupply(address,address[],uint256,uint256)\""
                            },
                            "value": "swapWithExactSupply(address,address[],uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 315,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "3864:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "3864:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 317,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 264,
                            "src": "3876:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 318,
                            "name": "supplyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 266,
                            "src": "3882:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 319,
                            "name": "minTargetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 268,
                            "src": "3896:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_579baa184c8ddcb5381eff7c96b2a2ecf2974cbc63fccade7cf347b10b53f0ed",
                              "typeString": "literal_string \"swapWithExactSupply(address,address[],uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 312,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "3782:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "3782:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3782:130:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 310,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "3766:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "3766:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3766:147:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3724:189:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3932:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3964:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "3993:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4005:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3989:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3989:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "4012:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4012:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "3982:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3982:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3982:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "3952:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3961:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "3949:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3949:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "3946:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 309,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3993:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 307,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3952:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 323,
                  "nodeType": "InlineAssembly",
                  "src": "3923:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 325,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4075:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4075:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 327,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 264,
                        "src": "4087:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "id": 328,
                        "name": "supplyAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 266,
                        "src": "4093:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 331,
                            "name": "returnData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 309,
                            "src": "4118:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "components": [
                              {
                                "id": 333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4131:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 332,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4131:7:0",
                                  "typeDescriptions": {}
                                }
                              }
                            ],
                            "id": 334,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4130:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "expression": {
                            "id": 329,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "4107:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "decode",
                          "nodeType": "MemberAccess",
                          "src": "4107:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4107:33:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 324,
                      "name": "Swaped",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 594,
                      "src": "4068:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address[] memory,uint256,uint256)"
                      }
                    },
                    "id": 336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4068:73:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 337,
                  "nodeType": "EmitStatement",
                  "src": "4063:78:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4158:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 273,
                  "id": 339,
                  "nodeType": "Return",
                  "src": "4151:11:0"
                }
              ]
            },
            "documentation": {
              "id": 261,
              "nodeType": "StructuredDocumentation",
              "src": "3246:122:0",
              "text": " @dev Swap with exact supply.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "6fc4b4e5",
            "id": 341,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swapWithExactSupply",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 270,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3487:8:0"
            },
            "parameters": {
              "id": 269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 264,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3402:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 262,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3402:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 263,
                    "nodeType": "ArrayTypeName",
                    "src": "3402:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 266,
                  "mutability": "mutable",
                  "name": "supplyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3425:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3425:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 268,
                  "mutability": "mutable",
                  "name": "minTargetAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3447:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 267,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3447:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3401:70:0"
            },
            "returnParameters": {
              "id": 273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 272,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 341,
                  "src": "3509:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 271,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3509:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3508:6:0"
            },
            "scope": 581,
            "src": "3373:796:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              680
            ],
            "body": {
              "id": 421,
              "nodeType": "Block",
              "src": "4444:654:0",
              "statements": [
                {
                  "body": {
                    "id": 378,
                    "nodeType": "Block",
                    "src": "4493:85:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 367,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 345,
                                  "src": "4515:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 369,
                                "indexExpression": {
                                  "id": 368,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 356,
                                  "src": "4520:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4515:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 372,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4534:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 371,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4526:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 370,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4526:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 373,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4526:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4515:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4445583a20746f6b656e206973207a65726f2061646472657373",
                              "id": 375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4538:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              },
                              "value": "DEX: token is zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f4ee8639d2367f4cb04226b1e416115a3887702de2e5171e1244310c744d379",
                                "typeString": "literal_string \"DEX: token is zero address\""
                              }
                            ],
                            "id": 366,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "4507:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4507:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 377,
                        "nodeType": "ExpressionStatement",
                        "src": "4507:60:0"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 359,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 356,
                      "src": "4471:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 360,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "4475:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 361,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "4475:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4471:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 379,
                  "initializationExpression": {
                    "assignments": [
                      356
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 379,
                        "src": "4459:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4459:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 358,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4468:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4459:10:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4488:3:0",
                      "subExpression": {
                        "id": 363,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 356,
                        "src": "4488:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 365,
                    "nodeType": "ExpressionStatement",
                    "src": "4488:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "4454:124:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 381,
                          "name": "targetAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 347,
                          "src": "4595:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4611:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4595:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746172676574416d6f756e74206973207a65726f",
                        "id": 384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4614:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        },
                        "value": "DEX: targetAmount is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_86df628dc31fd3a44095c305679d28963907739f578e66dfbc8f398f5b3cbd21",
                          "typeString": "literal_string \"DEX: targetAmount is zero\""
                        }
                      ],
                      "id": 380,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4587:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4587:55:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 386,
                  "nodeType": "ExpressionStatement",
                  "src": "4587:55:0"
                },
                {
                  "assignments": [
                    388,
                    390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 388,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 421,
                      "src": "4654:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 387,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4654:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 390,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 421,
                      "src": "4668:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 389,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4668:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 403,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "7377617057697468457861637454617267657428616464726573732c616464726573735b5d2c75696e743235362c75696e7432353629",
                            "id": 395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4735:56:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9782ac816caa94485a39864ea3a2ceafbf4bd927a06d8d084d63a566898ab7b3",
                              "typeString": "literal_string \"swapWithExactTarget(address,address[],uint256,uint256)\""
                            },
                            "value": "swapWithExactTarget(address,address[],uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 396,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "4793:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "4793:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 398,
                            "name": "path",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 345,
                            "src": "4805:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "id": 399,
                            "name": "targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 347,
                            "src": "4811:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 400,
                            "name": "maxSupplyAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 349,
                            "src": "4825:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_9782ac816caa94485a39864ea3a2ceafbf4bd927a06d8d084d63a566898ab7b3",
                              "typeString": "literal_string \"swapWithExactTarget(address,address[],uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 393,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "4711:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "4711:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4711:130:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 391,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "4695:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "4695:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4695:147:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4653:189:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "4861:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4893:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "4922:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4934:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4918:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4918:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "4941:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4941:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "4911:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4911:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4911:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "4881:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4890:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "4878:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4878:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "4875:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 390,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4922:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 388,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4881:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 404,
                  "nodeType": "InlineAssembly",
                  "src": "4852:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 406,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "5004:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5004:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 408,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "5016:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 411,
                            "name": "returnData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 390,
                            "src": "5033:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "components": [
                              {
                                "id": 413,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5046:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 412,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5046:7:0",
                                  "typeDescriptions": {}
                                }
                              }
                            ],
                            "id": 414,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5045:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "expression": {
                            "id": 409,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "5022:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "decode",
                          "nodeType": "MemberAccess",
                          "src": "5022:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5022:33:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 416,
                        "name": "targetAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 347,
                        "src": "5057:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 405,
                      "name": "Swaped",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 594,
                      "src": "4997:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address[] memory,uint256,uint256)"
                      }
                    },
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4997:73:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 418,
                  "nodeType": "EmitStatement",
                  "src": "4992:78:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5087:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 354,
                  "id": 420,
                  "nodeType": "Return",
                  "src": "5080:11:0"
                }
              ]
            },
            "documentation": {
              "id": 342,
              "nodeType": "StructuredDocumentation",
              "src": "4175:122:0",
              "text": " @dev Swap with exact target.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "3d8d9620",
            "id": 422,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swapWithExactTarget",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 351,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4416:8:0"
            },
            "parameters": {
              "id": 350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 345,
                  "mutability": "mutable",
                  "name": "path",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4331:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 343,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4331:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 344,
                    "nodeType": "ArrayTypeName",
                    "src": "4331:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 347,
                  "mutability": "mutable",
                  "name": "targetAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4354:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4354:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 349,
                  "mutability": "mutable",
                  "name": "maxSupplyAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4376:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4376:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4330:70:0"
            },
            "returnParameters": {
              "id": 354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 353,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 422,
                  "src": "4438:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 352,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4438:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4437:6:0"
            },
            "scope": 581,
            "src": "4302:796:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              695
            ],
            "body": {
              "id": 504,
              "nodeType": "Block",
              "src": "5406:740:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 440,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 425,
                          "src": "5424:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5442:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5434:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 441,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5434:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5434:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5424:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5446:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 439,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5416:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5416:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 448,
                  "nodeType": "ExpressionStatement",
                  "src": "5416:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 450,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 427,
                          "src": "5494:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5512:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 452,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5504:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 451,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5504:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5504:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5494:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5516:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 449,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5486:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5486:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 458,
                  "nodeType": "ExpressionStatement",
                  "src": "5486:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 460,
                          "name": "maxAmountA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 429,
                          "src": "5564:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5578:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5564:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a206d6178416d6f756e7441206973207a65726f",
                        "id": 463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5581:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392",
                          "typeString": "literal_string \"DEX: maxAmountA is zero\""
                        },
                        "value": "DEX: maxAmountA is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e12add76f52f20ae83632b3f42ec4b7a11b91881cac2b1f1982c587e7471f392",
                          "typeString": "literal_string \"DEX: maxAmountA is zero\""
                        }
                      ],
                      "id": 459,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5556:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5556:51:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 465,
                  "nodeType": "ExpressionStatement",
                  "src": "5556:51:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 467,
                          "name": "maxAmountB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 431,
                          "src": "5625:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5639:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5625:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a206d6178416d6f756e7442206973207a65726f",
                        "id": 470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5642:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab",
                          "typeString": "literal_string \"DEX: maxAmountB is zero\""
                        },
                        "value": "DEX: maxAmountB is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2579cfebbe2d9c9fcadc8ba59b1e058a659d8e5073a0d9b8930f4fd8ec8ba5ab",
                          "typeString": "literal_string \"DEX: maxAmountB is zero\""
                        }
                      ],
                      "id": 466,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5617:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5617:51:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 472,
                  "nodeType": "ExpressionStatement",
                  "src": "5617:51:0"
                },
                {
                  "assignments": [
                    474,
                    476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 474,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 504,
                      "src": "5680:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 473,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5680:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 476,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 504,
                      "src": "5694:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 475,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "5694:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 491,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6164644c697175696469747928616464726573732c616464726573732c616464726573732c75696e743235362c75696e743235362c75696e7432353629",
                            "id": 481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5761:63:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_67088d59021160826815af242575a1167b4d36dadd782ad9c9cc6375758daa99",
                              "typeString": "literal_string \"addLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            "value": "addLiquidity(address,address,address,uint256,uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 482,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "5826:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "5826:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 484,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 425,
                            "src": "5838:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 485,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 427,
                            "src": "5846:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 486,
                            "name": "maxAmountA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 429,
                            "src": "5854:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 487,
                            "name": "maxAmountB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 431,
                            "src": "5866:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 488,
                            "name": "minShareIncrement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 433,
                            "src": "5878:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_67088d59021160826815af242575a1167b4d36dadd782ad9c9cc6375758daa99",
                              "typeString": "literal_string \"addLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 479,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "5737:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "5737:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5737:159:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 477,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "5721:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "5721:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5721:176:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5679:218:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5916:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5948:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "5977:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5989:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5973:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5973:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "5996:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5996:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "5966:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5966:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5966:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "5936:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5945:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "5933:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5933:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "5930:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 476,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5977:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 474,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5936:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 492,
                  "nodeType": "InlineAssembly",
                  "src": "5907:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 494,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "6067:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6067:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 496,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 425,
                        "src": "6079:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 497,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 427,
                        "src": "6087:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 498,
                        "name": "maxAmountA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 429,
                        "src": "6095:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 499,
                        "name": "maxAmountB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 431,
                        "src": "6107:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 493,
                      "name": "AddedLiquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 606,
                      "src": "6052:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6052:66:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 501,
                  "nodeType": "EmitStatement",
                  "src": "6047:71:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6135:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 438,
                  "id": 503,
                  "nodeType": "Return",
                  "src": "6128:11:0"
                }
              ]
            },
            "documentation": {
              "id": 423,
              "nodeType": "StructuredDocumentation",
              "src": "5104:133:0",
              "text": " @dev Add liquidity to the trading pair.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "91c98a2a",
            "id": 505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 435,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5378:8:0"
            },
            "parameters": {
              "id": 434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 425,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5264:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5264:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 427,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5280:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5280:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 429,
                  "mutability": "mutable",
                  "name": "maxAmountA",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5296:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 428,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5296:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 431,
                  "mutability": "mutable",
                  "name": "maxAmountB",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5316:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5316:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 433,
                  "mutability": "mutable",
                  "name": "minShareIncrement",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5336:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5336:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5263:99:0"
            },
            "returnParameters": {
              "id": 438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 437,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 505,
                  "src": "5400:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 436,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5400:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5399:6:0"
            },
            "scope": 581,
            "src": "5242:904:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              710
            ],
            "body": {
              "id": 579,
              "nodeType": "Block",
              "src": "6462:675:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 523,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 508,
                          "src": "6480:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 526,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6498:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6490:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 524,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6490:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6490:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6480:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e41206973207a65726f2061646472657373",
                        "id": 529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6502:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        },
                        "value": "DEX: tokenA is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c3b6ba43263591c4fc50cb07c3e1a1ac37cd47f30498d4590239dd1e10ca604",
                          "typeString": "literal_string \"DEX: tokenA is zero address\""
                        }
                      ],
                      "id": 522,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6472:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6472:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 531,
                  "nodeType": "ExpressionStatement",
                  "src": "6472:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 533,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 510,
                          "src": "6550:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6568:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6560:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 534,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6560:7:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6560:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6550:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a20746f6b656e42206973207a65726f2061646472657373",
                        "id": 539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6572:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        },
                        "value": "DEX: tokenB is zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cdf9f3a167e5b67e2fa99401a7d14d37e442c15277c2a8e028bc5ceebddb1c94",
                          "typeString": "literal_string \"DEX: tokenB is zero address\""
                        }
                      ],
                      "id": 532,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6542:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6542:60:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 541,
                  "nodeType": "ExpressionStatement",
                  "src": "6542:60:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 543,
                          "name": "removeShare",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 512,
                          "src": "6620:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6635:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6620:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4445583a2072656d6f76655368617265206973207a65726f",
                        "id": 546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6638:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322",
                          "typeString": "literal_string \"DEX: removeShare is zero\""
                        },
                        "value": "DEX: removeShare is zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76273b30abd14715275df70db332a9ff518e10c7e2bd1846180cac7766d4d322",
                          "typeString": "literal_string \"DEX: removeShare is zero\""
                        }
                      ],
                      "id": 542,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6612:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6612:53:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 548,
                  "nodeType": "ExpressionStatement",
                  "src": "6612:53:0"
                },
                {
                  "assignments": [
                    550,
                    552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 550,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 579,
                      "src": "6677:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 549,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6677:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 552,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 579,
                      "src": "6691:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 551,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6691:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 567,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "72656d6f76654c697175696469747928616464726573732c616464726573732c616464726573732c75696e743235362c75696e743235362c75696e7432353629",
                            "id": 557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6758:66:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_35315332d72d685887f38197e4711e35b747586742ed6b783ca8c5ec1aeb4ead",
                              "typeString": "literal_string \"removeLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            "value": "removeLiquidity(address,address,address,uint256,uint256,uint256)"
                          },
                          {
                            "expression": {
                              "id": 558,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "6826:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "6826:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 560,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 508,
                            "src": "6838:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 561,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 510,
                            "src": "6846:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 562,
                            "name": "removeShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 512,
                            "src": "6854:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 563,
                            "name": "minWithdrawnA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 514,
                            "src": "6867:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 564,
                            "name": "minWithdrawnB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 516,
                            "src": "6882:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_35315332d72d685887f38197e4711e35b747586742ed6b783ca8c5ec1aeb4ead",
                              "typeString": "literal_string \"removeLiquidity(address,address,address,uint256,uint256,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 555,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "6734:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "6734:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6734:162:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 553,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "6718:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "6718:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6718:179:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6676:221:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "6916:121:0",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6948:79:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "6977:10:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6989:4:0",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6973:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6973:21:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "6996:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6996:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6966:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6966:47:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6966:47:0"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "6936:7:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6945:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "6933:2:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6933:14:0"
                        },
                        "nodeType": "YulIf",
                        "src": "6930:2:0"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 552,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6977:10:0",
                      "valueSize": 1
                    },
                    {
                      "declaration": 550,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6936:7:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 568,
                  "nodeType": "InlineAssembly",
                  "src": "6907:130:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 570,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "7069:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7069:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 572,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 508,
                        "src": "7081:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 573,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 510,
                        "src": "7089:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 574,
                        "name": "removeShare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 512,
                        "src": "7097:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 569,
                      "name": "RemovedLiquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 616,
                      "src": "7052:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7052:57:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 576,
                  "nodeType": "EmitStatement",
                  "src": "7047:62:0"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7126:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 521,
                  "id": 578,
                  "nodeType": "Return",
                  "src": "7119:11:0"
                }
              ]
            },
            "documentation": {
              "id": 506,
              "nodeType": "StructuredDocumentation",
              "src": "6152:138:0",
              "text": " @dev Remove liquidity from the trading pair.\n Returns a boolean value indicating whether the operation succeeded."
            },
            "functionSelector": "e2dc85dc",
            "id": 580,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 518,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6434:8:0"
            },
            "parameters": {
              "id": 517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 508,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6320:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 507,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6320:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 510,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6336:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 509,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6336:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 512,
                  "mutability": "mutable",
                  "name": "removeShare",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6352:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6352:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 514,
                  "mutability": "mutable",
                  "name": "minWithdrawnA",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6373:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6373:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 516,
                  "mutability": "mutable",
                  "name": "minWithdrawnB",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6396:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6396:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6319:99:0"
            },
            "returnParameters": {
              "id": 521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 520,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 580,
                  "src": "6456:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 519,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6456:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6455:6:0"
            },
            "scope": 581,
            "src": "6295:842:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 582,
        "src": "93:7046:0"
      }
    ],
    "src": "46:7094:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.0+commit.c7dfd78e.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.1",
  "updatedAt": "2021-11-23T02:17:23.970Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "addLiquidity(address,address,uint256,uint256,uint256)": {
        "details": "Add liquidity to the trading pair. Returns a boolean value indicating whether the operation succeeded."
      },
      "getLiquidityPool(address,address)": {
        "details": "Get liquidity pool of the currency_id_a and currency_id_b. Returns (liquidity_a, liquidity_b)"
      },
      "getLiquidityTokenAddress(address,address)": {
        "details": "Get Liquidity token address. Returns (liquidity_token_address)"
      },
      "getSwapSupplyAmount(address[],uint256)": {
        "details": "Get swap supply amount. Returns (supply_amount)"
      },
      "getSwapTargetAmount(address[],uint256)": {
        "details": "Get swap target amount. Returns (target_amount)"
      },
      "removeLiquidity(address,address,uint256,uint256,uint256)": {
        "details": "Remove liquidity from the trading pair. Returns a boolean value indicating whether the operation succeeded."
      },
      "swapWithExactSupply(address[],uint256,uint256)": {
        "details": "Swap with exact supply. Returns a boolean value indicating whether the operation succeeded."
      },
      "swapWithExactTarget(address[],uint256,uint256)": {
        "details": "Swap with exact target. Returns a boolean value indicating whether the operation succeeded."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}