{
  "id": "96d60b9804794ca761ed0060eb805676",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.10",
  "solcLongVersion": "0.6.10+commit.00c0fcaf",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol": {
        "content": "/*\n    Copyright 2020 Yam Finance\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache License, Version 2.0\n*/\n\npragma solidity 0.6.10;\npragma experimental \"ABIEncoderV2\";\n\n/**\n * @title UniswapV2TradeAdapter\n * @author Yam Finance\n *\n * Exchange adapter for Uniswap V2 Router02 that encodes trade data\n */\ncontract UniswapV2ExchangeAdapter {\n\n    /* ============ State Variables ============ */\n\n    // Address of Uniswap V2 Router02 contract\n    address public immutable router;\n\n    /* ============ Constructor ============ */\n\n    /**\n     * Set state variables\n     *\n     * @param _router       Address of Uniswap V2 Router02 contract\n     */\n    constructor(address _router) public {\n        router = _router;\n    }\n\n    /* ============ External Getter Functions ============ */\n\n    /**\n     * Return calldata for Uniswap V2 Router02\n     *\n     * @param  _sourceToken              Address of source token to be sold\n     * @param  _destinationToken         Address of destination token to buy\n     * @param  _destinationAddress       Address that assets should be transferred to\n     * @param  _sourceQuantity           Amount of source token to sell\n     * @param  _minDestinationQuantity   Min amount of destination token to buy\n     * @param  _data                     Arbitrary bytes containing trade call data\n     *\n     * @return address                   Target contract address\n     * @return uint256                   Call value\n     * @return bytes                     Trade calldata\n     */\n    function getTradeCalldata(\n        address _sourceToken,\n        address _destinationToken,\n        address _destinationAddress,\n        uint256 _sourceQuantity,\n        uint256 _minDestinationQuantity,\n        bytes memory _data\n    )\n        external\n        view\n        returns (address, uint256, bytes memory)\n    {   \n        address[] memory path;\n\n        if(_data.length == 0){\n            path = new address[](2);\n            path[0] = _sourceToken;\n            path[1] = _destinationToken;\n        } else {\n            path = abi.decode(_data, (address[]));\n        }\n\n        bytes memory callData = abi.encodeWithSignature(\n            \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\",\n            _sourceQuantity,\n            _minDestinationQuantity,\n            path,\n            _destinationAddress,\n            block.timestamp\n        );\n        return (router, 0, callData);\n    }\n\n    /**\n     * Returns the address to approve source tokens to for trading. This is the Uniswap router address\n     *\n     * @return address             Address of the contract to approve tokens to\n     */\n    function getSpender()\n        external\n        view\n        returns (address)\n    {\n        return router;\n    }\n} "
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol": {
        "UniswapV2ExchangeAdapter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_router",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "getSpender",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_sourceToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_destinationToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_destinationAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_sourceQuantity",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_minDestinationQuantity",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "getTradeCalldata",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "router",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60a060405234801561001057600080fd5b506040516105a83803806105a883398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c61051061009860003980609052806101a152806101d852506105106000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063334fc28914610046578063e171fcab14610064578063f887ea4014610086575b600080fd5b61004e61008e565b60405161005b919061037d565b60405180910390f35b61007761007236600461020b565b6100b2565b60405161005b93929190610391565b61004e6101d6565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008060608084516000141561014357604080516002808252606082018352909160208301908036833701905050905089816000815181106100f057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050888160018151811061011e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061015a565b8480602001905181019061015791906102d2565b90505b60608787838b426040516024016101759594939291906103fb565b60408051601f198184030181529190526020810180516001600160e01b03166338ed173960e01b1790527f00000000000000000000000000000000000000000000000000000000000000009550600094509250505096509650969350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8051610205816104c2565b92915050565b60008060008060008060c08789031215610223578182fd5b863561022e816104c2565b9550602087013561023e816104c2565b9450604087013561024e816104c2565b9350606087013592506080870135915060a087013567ffffffffffffffff811115610277578182fd5b80880189601f820112610288578283fd5b8035915061029d61029883610492565b61046b565b8281528a60208484010111156102b1578384fd5b6102c28360208301602085016104b6565b8093505050509295509295509295565b600060208083850312156102e4578182fd5b825167ffffffffffffffff808211156102fb578384fd5b81850186601f82011261030c578485fd5b805192508183111561031c578485fd5b838302915061032c84830161046b565b8381528481019082860184840187018a1015610346578788fd5b8794505b858510156103705761035c8a826101fa565b83526001949094019391860191860161034a565b5098975050505050505050565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b818110156103d2578581018301518582016080015282016103b6565b818111156103e35783608083870101525b50601f01601f19169290920160800195945050505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561044a5784516001600160a01b031683529383019391830191600101610425565b50506001600160a01b03969096166060850152505050608001529392505050565b60405181810167ffffffffffffffff8111828210171561048a57600080fd5b604052919050565b600067ffffffffffffffff8211156104a8578081fd5b50601f01601f191660200190565b82818337506000910152565b6001600160a01b03811681146104d757600080fd5b5056fea264697066735822122097b8a60e0758f0565255288a40a2b39303d19d3a168357c3efc732819cced73e64736f6c634300060a0033",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x5A8 CODESIZE SUB DUP1 PUSH2 0x5A8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x44 JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x80 MSTORE PUSH2 0x72 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x510 PUSH2 0x98 PUSH1 0x0 CODECOPY DUP1 PUSH1 0x90 MSTORE DUP1 PUSH2 0x1A1 MSTORE DUP1 PUSH2 0x1D8 MSTORE POP PUSH2 0x510 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x334FC289 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xE171FCAB EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xF887EA40 EQ PUSH2 0x86 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x37D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x20B JUMP JUMPDEST PUSH2 0xB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x391 JUMP JUMPDEST PUSH2 0x4E PUSH2 0x1D6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 DUP5 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x143 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP1 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP10 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP9 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x11E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x15A JUMP JUMPDEST DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157 SWAP2 SWAP1 PUSH2 0x2D2 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x60 DUP8 DUP8 DUP4 DUP12 TIMESTAMP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x175 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3FB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x38ED1739 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH32 0x0 SWAP6 POP PUSH1 0x0 SWAP5 POP SWAP3 POP POP POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x205 DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x223 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x22E DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x23E DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x24E DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x277 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 DUP9 ADD DUP10 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x288 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP2 POP PUSH2 0x29D PUSH2 0x298 DUP4 PUSH2 0x492 JUMP JUMPDEST PUSH2 0x46B JUMP JUMPDEST DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP5 ADD ADD GT ISZERO PUSH2 0x2B1 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2C2 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP6 ADD PUSH2 0x4B6 JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2FB JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x30C JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x31C JUMPI DUP5 DUP6 REVERT JUMPDEST DUP4 DUP4 MUL SWAP2 POP PUSH2 0x32C DUP5 DUP4 ADD PUSH2 0x46B JUMP JUMPDEST DUP4 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP3 DUP7 ADD DUP5 DUP5 ADD DUP8 ADD DUP11 LT ISZERO PUSH2 0x346 JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP5 POP JUMPDEST DUP6 DUP6 LT ISZERO PUSH2 0x370 JUMPI PUSH2 0x35C DUP11 DUP3 PUSH2 0x1FA JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0x34A JUMP JUMPDEST POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE PUSH1 0x20 DUP5 DUP2 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x60 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D2 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP3 ADD PUSH2 0x3B6 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3E3 JUMPI DUP4 PUSH1 0x80 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x80 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD DUP8 DUP4 MSTORE PUSH1 0x20 DUP8 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x44A JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x425 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 SWAP1 SWAP7 AND PUSH1 0x60 DUP6 ADD MSTORE POP POP POP PUSH1 0x80 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4A8 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xB8 0xA6 0xE SMOD PC CREATE JUMP MSTORE SSTORE 0x28 DUP11 BLOCKHASH LOG2 0xB3 SWAP4 SUB 0xD1 SWAP14 GASPRICE AND DUP4 JUMPI 0xC3 0xEF 0xC7 ORIGIN DUP2 SWAP13 0xCE 0xD7 RETURNDATACOPY PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
              "sourceMap": "848:2454:0:-:0;;;1194:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1240:16;;-1:-1:-1;;;;;;1240:16:0;;;848:2454;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186;;848:2454:0;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "5": [
                  {
                    "length": 32,
                    "start": 144
                  },
                  {
                    "length": 32,
                    "start": 417
                  },
                  {
                    "length": 32,
                    "start": 472
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c8063334fc28914610046578063e171fcab14610064578063f887ea4014610086575b600080fd5b61004e61008e565b60405161005b919061037d565b60405180910390f35b61007761007236600461020b565b6100b2565b60405161005b93929190610391565b61004e6101d6565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008060608084516000141561014357604080516002808252606082018352909160208301908036833701905050905089816000815181106100f057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050888160018151811061011e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061015a565b8480602001905181019061015791906102d2565b90505b60608787838b426040516024016101759594939291906103fb565b60408051601f198184030181529190526020810180516001600160e01b03166338ed173960e01b1790527f00000000000000000000000000000000000000000000000000000000000000009550600094509250505096509650969350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8051610205816104c2565b92915050565b60008060008060008060c08789031215610223578182fd5b863561022e816104c2565b9550602087013561023e816104c2565b9450604087013561024e816104c2565b9350606087013592506080870135915060a087013567ffffffffffffffff811115610277578182fd5b80880189601f820112610288578283fd5b8035915061029d61029883610492565b61046b565b8281528a60208484010111156102b1578384fd5b6102c28360208301602085016104b6565b8093505050509295509295509295565b600060208083850312156102e4578182fd5b825167ffffffffffffffff808211156102fb578384fd5b81850186601f82011261030c578485fd5b805192508183111561031c578485fd5b838302915061032c84830161046b565b8381528481019082860184840187018a1015610346578788fd5b8794505b858510156103705761035c8a826101fa565b83526001949094019391860191860161034a565b5098975050505050505050565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b818110156103d2578581018301518582016080015282016103b6565b818111156103e35783608083870101525b50601f01601f19169290920160800195945050505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561044a5784516001600160a01b031683529383019391830191600101610425565b50506001600160a01b03969096166060850152505050608001529392505050565b60405181810167ffffffffffffffff8111828210171561048a57600080fd5b604052919050565b600067ffffffffffffffff8211156104a8578081fd5b50601f01601f191660200190565b82818337506000910152565b6001600160a01b03811681146104d757600080fd5b5056fea264697066735822122097b8a60e0758f0565255288a40a2b39303d19d3a168357c3efc732819cced73e64736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x334FC289 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xE171FCAB EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xF887EA40 EQ PUSH2 0x86 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x37D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x20B JUMP JUMPDEST PUSH2 0xB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x391 JUMP JUMPDEST PUSH2 0x4E PUSH2 0x1D6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 DUP5 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x143 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP1 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP10 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP9 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x11E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x15A JUMP JUMPDEST DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157 SWAP2 SWAP1 PUSH2 0x2D2 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x60 DUP8 DUP8 DUP4 DUP12 TIMESTAMP PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x175 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3FB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x38ED1739 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH32 0x0 SWAP6 POP PUSH1 0x0 SWAP5 POP SWAP3 POP POP POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x205 DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x223 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x22E DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x23E DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x24E DUP2 PUSH2 0x4C2 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x277 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 DUP9 ADD DUP10 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x288 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP2 POP PUSH2 0x29D PUSH2 0x298 DUP4 PUSH2 0x492 JUMP JUMPDEST PUSH2 0x46B JUMP JUMPDEST DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP5 ADD ADD GT ISZERO PUSH2 0x2B1 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2C2 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP6 ADD PUSH2 0x4B6 JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E4 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2FB JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x30C JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x31C JUMPI DUP5 DUP6 REVERT JUMPDEST DUP4 DUP4 MUL SWAP2 POP PUSH2 0x32C DUP5 DUP4 ADD PUSH2 0x46B JUMP JUMPDEST DUP4 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP3 DUP7 ADD DUP5 DUP5 ADD DUP8 ADD DUP11 LT ISZERO PUSH2 0x346 JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP5 POP JUMPDEST DUP6 DUP6 LT ISZERO PUSH2 0x370 JUMPI PUSH2 0x35C DUP11 DUP3 PUSH2 0x1FA JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0x34A JUMP JUMPDEST POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE PUSH1 0x20 DUP5 DUP2 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x60 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D2 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP3 ADD PUSH2 0x3B6 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3E3 JUMPI DUP4 PUSH1 0x80 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x80 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD DUP8 DUP4 MSTORE PUSH1 0x20 DUP8 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP8 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP DUP3 DUP10 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x44A JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x425 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 SWAP1 SWAP7 AND PUSH1 0x60 DUP6 ADD MSTORE POP POP POP PUSH1 0x80 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4A8 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xB8 0xA6 0xE SMOD PC CREATE JUMP MSTORE SSTORE 0x28 DUP11 BLOCKHASH LOG2 0xB3 SWAP4 SUB 0xD1 SWAP14 GASPRICE AND DUP4 JUMPI 0xC3 0xEF 0xC7 ORIGIN DUP2 SWAP13 0xCE 0xD7 RETURNDATACOPY PUSH5 0x736F6C6343 STOP MOD EXP STOP CALLER ",
              "sourceMap": "848:2454:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3188:112;;;:::i;:::-;;;;;;;;;;;;;;;;2057:919;;;;;;;;;:::i;:::-;;;;;;;;;;989:31;;;:::i;3188:112::-;3287:6;3188:112;:::o;2057:919::-;2340:7;2349;2358:12;2389:21;2424:5;:12;2440:1;2424:17;2421:214;;;2463:16;;;2477:1;2463:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2463:16:0;2456:23;;2503:12;2493:4;2498:1;2493:7;;;;;;;;;;;;;:22;-1:-1:-1;;;;;2493:22:0;;;-1:-1:-1;;;;;2493:22:0;;;;;2539:17;2529:4;2534:1;2529:7;;;;;;;;;;;;;:27;-1:-1:-1;;;;;2529:27:0;;;-1:-1:-1;;;;;2529:27:0;;;;;2421:214;;;2605:5;2594:30;;;;;;;;;;;;;;2587:37;;2421:214;2645:21;2789:15;2818:23;2855:4;2873:19;2906:15;2669:262;;;;;;;;;;;;;;;;;-1:-1:-1;;2669:262:0;;;;;;;;;;;;;;-1:-1:-1;;;;;2669:262:0;-1:-1:-1;;;2669:262:0;;;2949:6;;-1:-1:-1;;;;2669:262:0;-1:-1:-1;;;2057:919:0;;;;;;;;;;:::o;989:31::-;;;:::o;142:134:-1:-;220:13;;238:33;220:13;238:33;;;205:71;;;;;1617:973;;;;;;;1815:3;1803:9;1794:7;1790:23;1786:33;1783:2;;;-1:-1;;1822:12;1783:2;85:6;72:20;97:33;124:5;97:33;;;1874:63;-1:-1;1974:2;2013:22;;72:20;97:33;72:20;97:33;;;1982:63;-1:-1;2082:2;2121:22;;72:20;97:33;72:20;97:33;;;2090:63;-1:-1;2190:2;2229:22;;1547:20;;-1:-1;2298:3;2338:22;;1547:20;;-1:-1;2435:3;2420:19;;2407:33;2460:18;2449:30;;2446:2;;;-1:-1;;2482:12;2446:2;2557:6;2546:9;2542:22;1133:3;1126:4;1118:6;1114:17;1110:27;1100:2;;-1:-1;;1141:12;1100:2;1188:6;1175:20;1161:34;;1210:64;1225:48;1266:6;1225:48;;;1210:64;;;1294:6;1287:5;1280:21;1398:3;1974:2;1389:6;1322;1380:16;;1377:25;1374:2;;;-1:-1;;1405:12;1374:2;1425:41;1459:6;1974:2;1356:5;1352:16;1974:2;1322:6;1318:17;1425:41;;;2502:72;;;;;;1777:813;;;;;;;;;2597:392;;2737:2;;2725:9;2716:7;2712:23;2708:32;2705:2;;;-1:-1;;2743:12;2705:2;2794:17;2788:24;2832:18;;2824:6;2821:30;2818:2;;;-1:-1;;2854:12;2818:2;2956:6;2945:9;2941:22;429:3;422:4;414:6;410:17;406:27;396:2;;-1:-1;;437:12;396:2;477:6;471:13;457:27;;2832:18;6608:6;6605:30;6602:2;;;-1:-1;;6638:12;6602:2;2737;6675:6;6671:17;;;499:80;2737:2;6671:17;6736:15;499:80;;;607:21;;;664:14;;;;639:17;;;744:27;;;;;741:36;-1:-1;738:2;;;-1:-1;;780:12;738:2;-1:-1;806:10;;800:217;825:6;822:1;819:13;800:217;;;905:48;949:3;937:10;905:48;;;893:61;;847:1;840:9;;;;;968:14;;;;996;;800:217;;;-1:-1;2874:99;2699:290;-1:-1;;;;;;;;2699:290;4607:222;-1:-1;;;;;8159:54;;;;3239:37;;4734:2;4719:18;;4705:124;4836:528;;2460:18;;8170:42;;;8163:5;8159:54;3246:3;3239:37;5201:2;4588:5;5201:2;5190:9;5186:18;4558:37;5037:2;5238;5227:9;5223:18;5216:48;4279:5;7357:12;7772:6;5037:2;5026:9;5022:18;7760:19;-1:-1;8531:101;8545:6;8542:1;8539:13;8531:101;;;8612:11;;;;;8606:18;8593:11;;;7800:14;8593:11;8586:39;8560:10;;8531:101;;;8647:6;8644:1;8641:13;8638:2;;;-1:-1;7800:14;8703:6;5026:9;8694:16;;8687:27;8638:2;-1:-1;8819:7;8803:14;-1:-1;;8799:28;4436:39;;;;7800:14;4436:39;;5008:356;-1:-1;;;;;5008:356;5371:816;;5660:3;5649:9;5645:19;4588:5;4565:3;4558:37;5825:2;4588:5;5825:2;5814:9;5810:18;4558:37;5660:3;5862:2;5851:9;5847:18;5840:48;5902:108;3632:5;7357:12;7772:6;7767:3;7760:19;7800:14;5649:9;7800:14;3644:93;;5825:2;3808:5;7211:14;3820:21;;-1:-1;3847:260;3872:6;3869:1;3866:13;3847:260;;;3933:13;;-1:-1;;;;;8159:54;3239:37;;7615:14;;;;3150;;;;2460:18;3887:9;3847:260;;;-1:-1;;;;;;;8159:54;;;;6089:2;6074:18;;3239:37;-1:-1;;;6172:3;6157:19;4558:37;5894:116;5631:556;-1:-1;;;5631:556;6194:256;6256:2;6250:9;6282:17;;;6357:18;6342:34;;6378:22;;;6339:62;6336:2;;;6414:1;;6404:12;6336:2;6256;6423:22;6234:216;;-1:-1;6234:216;6768:321;;6911:18;6903:6;6900:30;6897:2;;;-1:-1;;6933:12;6897:2;-1:-1;8819:7;6987:17;-1:-1;;6983:33;7074:4;7064:15;;6834:255;8305:145;8386:6;8381:3;8376;8363:30;-1:-1;8442:1;8424:16;;8417:27;8356:94;8840:117;-1:-1;;;;;8159:54;;8899:35;;8889:2;;8948:1;;8938:12;8889:2;8883:74;"
            },
            "methodIdentifiers": {
              "getSpender()": "334fc289",
              "getTradeCalldata(address,address,address,uint256,uint256,bytes)": "e171fcab",
              "router()": "f887ea40"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol": {
        "ast": {
          "absolutePath": "contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol",
          "exportedSymbols": {
            "UniswapV2ExchangeAdapter": [
              111
            ]
          },
          "id": 112,
          "license": "Apache License",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".10"
              ],
              "nodeType": "PragmaDirective",
              "src": "653:23:0"
            },
            {
              "id": 2,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "677:35:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3,
                "nodeType": "StructuredDocumentation",
                "src": "714:133:0",
                "text": " @title UniswapV2TradeAdapter\n @author Yam Finance\n Exchange adapter for Uniswap V2 Router02 that encodes trade data"
              },
              "fullyImplemented": true,
              "id": 111,
              "linearizedBaseContracts": [
                111
              ],
              "name": "UniswapV2ExchangeAdapter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "f887ea40",
                  "id": 5,
                  "mutability": "immutable",
                  "name": "router",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 111,
                  "src": "989:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "989:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 15,
                    "nodeType": "Block",
                    "src": "1230:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 11,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5,
                            "src": "1240:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 12,
                            "name": "_router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8,
                            "src": "1249:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1240:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 14,
                        "nodeType": "ExpressionStatement",
                        "src": "1240:16:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6,
                    "nodeType": "StructuredDocumentation",
                    "src": "1076:113:0",
                    "text": " Set state variables\n @param _router       Address of Uniswap V2 Router02 contract"
                  },
                  "id": 16,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 9,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8,
                        "mutability": "mutable",
                        "name": "_router",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "1206:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1206:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1205:17:0"
                  },
                  "returnParameters": {
                    "id": 10,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1230:0:0"
                  },
                  "scope": 111,
                  "src": "1194:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 100,
                    "nodeType": "Block",
                    "src": "2376:600:0",
                    "statements": [
                      {
                        "assignments": [
                          42
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 42,
                            "mutability": "mutable",
                            "name": "path",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 100,
                            "src": "2389:21:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 40,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2389:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 41,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "2389:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 43,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2389:21:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 47,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 44,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29,
                              "src": "2424:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 45,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2424:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 46,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2440:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2424:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 80,
                          "nodeType": "Block",
                          "src": "2573:62:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 78,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 69,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42,
                                  "src": "2587:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 72,
                                      "name": "_data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29,
                                      "src": "2605:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 74,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "2613:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_address_$",
                                              "typeString": "type(address)"
                                            },
                                            "typeName": {
                                              "id": 73,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "2613:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          },
                                          "id": 75,
                                          "indexExpression": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "2613:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_array$_t_address_$dyn_memory_ptr_$",
                                            "typeString": "type(address[] memory)"
                                          }
                                        }
                                      ],
                                      "id": 76,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "2612:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_array$_t_address_$dyn_memory_ptr_$",
                                        "typeString": "type(address[] memory)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_type$_t_array$_t_address_$dyn_memory_ptr_$",
                                        "typeString": "type(address[] memory)"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 70,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -1,
                                      "src": "2594:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 71,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "decode",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "2594:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 77,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2594:30:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "src": "2587:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 79,
                              "nodeType": "ExpressionStatement",
                              "src": "2587:37:0"
                            }
                          ]
                        },
                        "id": 81,
                        "nodeType": "IfStatement",
                        "src": "2421:214:0",
                        "trueBody": {
                          "id": 68,
                          "nodeType": "Block",
                          "src": "2442:125:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 54,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 48,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42,
                                  "src": "2456:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "32",
                                      "id": 52,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2477:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      }
                                    ],
                                    "id": 51,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "NewExpression",
                                    "src": "2463:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                      "typeString": "function (uint256) pure returns (address[] memory)"
                                    },
                                    "typeName": {
                                      "baseType": {
                                        "id": 49,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2467:7:0",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 50,
                                      "length": null,
                                      "nodeType": "ArrayTypeName",
                                      "src": "2467:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                        "typeString": "address[]"
                                      }
                                    }
                                  },
                                  "id": 53,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2463:16:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "src": "2456:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 55,
                              "nodeType": "ExpressionStatement",
                              "src": "2456:23:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 60,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 56,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 42,
                                    "src": "2493:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 58,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 57,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2498:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2493:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 59,
                                  "name": "_sourceToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19,
                                  "src": "2503:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2493:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 61,
                              "nodeType": "ExpressionStatement",
                              "src": "2493:22:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 66,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 62,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 42,
                                    "src": "2529:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 64,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 63,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2534:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2529:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 65,
                                  "name": "_destinationToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21,
                                  "src": "2539:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2529:27:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 67,
                              "nodeType": "ExpressionStatement",
                              "src": "2529:27:0"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          83
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 83,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 100,
                            "src": "2645:21:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 82,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2645:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 94,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629",
                              "id": 86,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2706:69:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_38ed1739ee07daf49933f1800d1a9bc8d39a6876ea11e643f9c4c39c66df0ee8",
                                "typeString": "literal_string \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\""
                              },
                              "value": "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)"
                            },
                            {
                              "argumentTypes": null,
                              "id": 87,
                              "name": "_sourceQuantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25,
                              "src": "2789:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 88,
                              "name": "_minDestinationQuantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27,
                              "src": "2818:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 89,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42,
                              "src": "2855:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 90,
                              "name": "_destinationAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23,
                              "src": "2873:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 91,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "2906:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 92,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2906:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_38ed1739ee07daf49933f1800d1a9bc8d39a6876ea11e643f9c4c39c66df0ee8",
                                "typeString": "literal_string \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\""
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 84,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2669:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 85,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodeWithSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2669: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": 93,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2669:262:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2645:286:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 95,
                              "name": "router",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5,
                              "src": "2949:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 96,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2957:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 97,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 83,
                              "src": "2960:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 98,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2948:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 37,
                        "id": 99,
                        "nodeType": "Return",
                        "src": "2941:28:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "1332:720:0",
                    "text": " Return calldata for Uniswap V2 Router02\n @param  _sourceToken              Address of source token to be sold\n @param  _destinationToken         Address of destination token to buy\n @param  _destinationAddress       Address that assets should be transferred to\n @param  _sourceQuantity           Amount of source token to sell\n @param  _minDestinationQuantity   Min amount of destination token to buy\n @param  _data                     Arbitrary bytes containing trade call data\n @return address                   Target contract address\n @return uint256                   Call value\n @return bytes                     Trade calldata"
                  },
                  "functionSelector": "e171fcab",
                  "id": 101,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTradeCalldata",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 30,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 19,
                        "mutability": "mutable",
                        "name": "_sourceToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2092:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2092:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 21,
                        "mutability": "mutable",
                        "name": "_destinationToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2122:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2122:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 23,
                        "mutability": "mutable",
                        "name": "_destinationAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2157:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 22,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2157:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 25,
                        "mutability": "mutable",
                        "name": "_sourceQuantity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2194:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 24,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2194:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 27,
                        "mutability": "mutable",
                        "name": "_minDestinationQuantity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2227:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 26,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2227:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 29,
                        "mutability": "mutable",
                        "name": "_data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2268:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2268:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2082:210:0"
                  },
                  "returnParameters": {
                    "id": 37,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 32,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2340:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 31,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2340:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2349:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2349:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 36,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "2358:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 35,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2358:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2339:32:0"
                  },
                  "scope": 111,
                  "src": "2057:919:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 109,
                    "nodeType": "Block",
                    "src": "3270:30:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 107,
                          "name": "router",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5,
                          "src": "3287:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 106,
                        "id": 108,
                        "nodeType": "Return",
                        "src": "3280:13:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 102,
                    "nodeType": "StructuredDocumentation",
                    "src": "2982:201:0",
                    "text": " Returns the address to approve source tokens to for trading. This is the Uniswap router address\n @return address             Address of the contract to approve tokens to"
                  },
                  "functionSelector": "334fc289",
                  "id": 110,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSpender",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 103,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3207:2:0"
                  },
                  "returnParameters": {
                    "id": 106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 105,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 110,
                        "src": "3257:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3257:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3256:9:0"
                  },
                  "scope": 111,
                  "src": "3188:112:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 112,
              "src": "848:2454:0"
            }
          ],
          "src": "653:2650:0"
        },
        "id": 0
      }
    }
  }
}
