{
  "contracts": {
    "contracts/OrderBook.sol:OrderBook": {
      "abi": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCanceled",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderClosed",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCreated",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderUpdate",
          "type": "event"
        },
        {
          "payable": true,
          "stateMutability": "payable",
          "type": "fallback"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "cancelLimitOrder",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createBuyLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createSellLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "factory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOutOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountInForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountInGet",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountInOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountOutForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOutGet",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserveBase",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserveQuote",
              "type": "uint112"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "name": "getUserOrders",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "orderIds",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "_pair",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_minAmount",
              "type": "uint256"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "maxSize",
              "type": "uint32"
            }
          ],
          "name": "marketBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "marketOrder",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "order",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "marketOrders",
          "outputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderType",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderIndex",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "minAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newMinAmount",
              "type": "uint256"
            }
          ],
          "name": "minAmountUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pair",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "decimal",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceStep",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newPriceStep",
              "type": "uint256"
            }
          ],
          "name": "priceStepUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "protocolFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newProtocolFeeRate",
              "type": "uint256"
            }
          ],
          "name": "protocolFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "name": "rangeBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address payable",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "safeRefund",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "subsidyFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newSubsidyFeeRate",
              "type": "uint256"
            }
          ],
          "name": "subsidyFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "takeOrderWhenMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOutLeft",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "accounts",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "userOrders",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x12 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x5928 DUP1 PUSH2 0x2A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x17E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x53B4B9D EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x19EDA4BC EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x217A4B70 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0x346970F9 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x38BDE791 EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x573DD9DB EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x58F85880 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0x6069F080 EQ PUSH2 0x4B0 JUMPI DUP1 PUSH4 0x63C69F08 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0x7DE81D8B EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x856652E9 EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x88D519C4 EQ PUSH2 0x60F JUMPI DUP1 PUSH4 0x950F59B2 EQ PUSH2 0x624 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x667 JUMPI DUP1 PUSH4 0x9B2CB5D8 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0xA5CDC8FC EQ PUSH2 0x691 JUMPI DUP1 PUSH4 0xA6B63EB8 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0xA8AA1B31 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xBC9113F0 EQ PUSH2 0x71F JUMPI DUP1 PUSH4 0xC2FFEA8F EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0xC55DAE63 EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xCB160866 EQ PUSH2 0x7B5 JUMPI DUP1 PUSH4 0xDB7B373E EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0xDEB65AC3 EQ PUSH2 0x805 JUMPI DUP1 PUSH4 0xE52FA98B EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0xE68CC597 EQ PUSH2 0x865 JUMPI DUP1 PUSH4 0xF12DBB9F EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xF1564C0B EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xF1A2E849 EQ PUSH2 0x90B JUMPI DUP1 PUSH4 0xF361DF08 EQ PUSH2 0x920 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x935 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x278 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2DF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x302 PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xC1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD29 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP10 DUP11 AND DUP2 MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x100 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xD79 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x487 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x46F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xF1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF22 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1020 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x108C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x581 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x569 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x11DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x120F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x14FC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1502 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x6DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x1770 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1A95 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1AA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1B1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1C89 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1E97 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x811 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x828 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x852 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1FC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x20CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x2215 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2476 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x259A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x25A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x97A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x34B73B30B634B21039B2B73232B9 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP1 DUP4 ADD DUP5 MSTORE SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0xA12 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA37 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xA4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE PUSH1 0x0 PUSH2 0xA65 DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA72 DUP3 PUSH2 0x273D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0xA82 DUP4 PUSH1 0x0 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 PUSH2 0xAC7 DUP6 DUP13 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xAA1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xAB6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST POP POP POP POP SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0xADC JUMPI POP PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAED DUP12 DUP8 DUP5 DUP8 DUP8 DUP15 DUP15 PUSH2 0x28CB JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP SWAP1 SWAP2 POP PUSH2 0xB07 SWAP1 POP DUP13 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP12 POP DUP2 DUP2 EQ ISZERO PUSH2 0xB18 JUMPI POP POP PUSH2 0xB2F JUMP JUMPDEST PUSH2 0xB22 DUP6 DUP6 PUSH2 0x29AC JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xA87 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x29B9 JUMP JUMPDEST DUP10 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0xB7D JUMPI PUSH2 0xB78 DUP11 DUP7 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0xBA3 JUMP JUMPDEST PUSH2 0xBA3 DUP11 DUP7 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST DUP9 ADD SWAP8 POP JUMPDEST POP POP POP POP POP PUSH1 0x1 PUSH1 0x12 DUP2 SWAP1 SSTORE POP SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD PUSH17 0x48796272696458204F72646572426F6F6B PUSH1 0x78 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH2 0xC13 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xC5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xC76 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xCC7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP2 GT ISZERO PUSH2 0xD10 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP6 SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x8 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH2 0x100 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0xDAC PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP5 SWAP2 PUSH2 0xE2F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xE56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xE74 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xE92 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xEB0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0xEEC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xF62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xF7C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xFCD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 GT ISZERO PUSH2 0x1016 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1080 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x106C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x109C DUP6 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 EQ ISZERO PUSH2 0x10D7 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10B9 JUMPI POP DUP5 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x10D2 JUMPI PUSH2 0x10C8 DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10AA JUMP JUMPDEST PUSH2 0x1109 JUMP JUMPDEST PUSH1 0x2 DUP7 EQ ISZERO PUSH2 0x1109 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10F0 JUMPI POP DUP5 DUP3 GT ISZERO JUMPDEST ISZERO PUSH2 0x1109 JUMPI PUSH2 0x10FF DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10E1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x11D2 JUMPI DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1139 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1166 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x1174 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP3 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11A4 DUP8 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x11B0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11C6 DUP8 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1179 JUMP JUMPDEST POP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x11F4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1251 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x126E JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x126B JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x12AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x12C4 DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1317 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1321 PUSH2 0x2DDB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xD SLOAD DUP3 GT PUSH2 0x1335 JUMPI PUSH1 0x0 PUSH2 0x133B JUMP JUMPDEST PUSH1 0xD SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x134E PUSH1 0x8 SLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x1396 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x1409 DUP4 DUP9 DUP9 PUSH2 0x2E85 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x146A JUMPI PUSH2 0x1420 DUP9 DUP8 DUP6 DUP5 DUP12 PUSH1 0x1 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP11 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND SWAP3 SWAP1 DUP12 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x1472 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x14AC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 DUP2 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x0 EQ PUSH2 0x14F7 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x14EC PUSH1 0x9 SLOAD PUSH1 0xA EXP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x14F3 JUMPI INVALID JUMPDEST DIV SWAP3 POP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1542 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH2 0x154F PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE CALLER EQ PUSH2 0x160A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x13DDDB995C88125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1613 DUP2 PUSH2 0x3532 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0xC0 ADD MLOAD EQ PUSH2 0x1632 JUMPI PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x163F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x1654 DUP2 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x36EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC0 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 EQ ISZERO PUSH2 0x16E4 JUMPI PUSH1 0xD DUP2 SWAP1 SSTORE PUSH2 0x16EA JUMP JUMPDEST PUSH1 0xC DUP2 SWAP1 SSTORE JUMPDEST DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD32766082EB3D1EE39881604CAE4EA25B61931060C8FBC7D5F05556040053B57 DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x17BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2327A92124A22222A7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x1806 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x188D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD21220A7 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0xD21220A7 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x190D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP8 AND EQ DUP1 ISZERO PUSH2 0x1956 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x198E JUMPI POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x198E JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x19D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x151BDAD95B8814185A5C88125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xB DUP1 SLOAD SWAP4 DUP10 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE PUSH1 0x7 DUP6 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP2 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x9 SSTORE POP POP PUSH1 0x8 SSTORE POP POP PUSH1 0x1E PUSH1 0xE SSTORE POP POP PUSH1 0x32 PUSH1 0xF SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x1B4B SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x1B6C DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1B79 DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x1B8C DUP5 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x1C2F JUMPI PUSH1 0x0 PUSH2 0x1BA9 DUP7 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x1BBE JUMPI POP PUSH2 0x1C2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BD8 DUP10 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x1BEF DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x1C03 DUP8 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP4 EQ ISZERO PUSH2 0x1C16 JUMPI POP POP POP POP PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x1C20 DUP9 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1B91 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP6 EQ PUSH2 0x1C4D JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x2AAF JUMP JUMPDEST DUP11 ADD SWAP10 POP JUMPDEST POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1CC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1CE3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1D87 JUMPI SELFBALANCE DUP1 ISZERO PUSH2 0x1D81 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA SLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E40 JUMPI PUSH1 0x0 PUSH2 0x1E24 PUSH1 0x2 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E34 JUMPI PUSH1 0x0 PUSH2 0x1E38 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x0 PUSH2 0x1E62 PUSH1 0x1 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E72 JUMPI PUSH1 0x0 PUSH2 0x1E76 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP JUMPDEST DUP1 ISZERO PUSH2 0x1E8B JUMPI PUSH2 0x1E8B DUP5 DUP5 DUP4 PUSH2 0x39BF JUMP JUMPDEST POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1EDD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1EF7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1F6C JUMPI PUSH2 0x1F19 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1F2D JUMPI POP PUSH2 0x1F2B PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1F6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1FB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1FCF DUP6 PUSH2 0x3B47 JUMP JUMPDEST SWAP1 POP DUP4 PUSH4 0xFFFFFFFF AND DUP2 GT PUSH2 0x1FE4 JUMPI DUP1 PUSH2 0x1FEC JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2018 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2045 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH2 0x2055 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x206E JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT JUMPDEST ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP6 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2086 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x209C DUP8 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x20AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x20C4 DUP8 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x205A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x20FC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x211D DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x212A DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x213D DUP6 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x21F1 JUMPI PUSH1 0x0 PUSH2 0x215A DUP6 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x3B59 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x216F JUMPI POP PUSH2 0x21F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2189 DUP9 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x3C97 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x21A1 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x21C5 PUSH2 0x21B8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST DUP9 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP3 EQ ISZERO PUSH2 0x21D8 JUMPI POP POP POP POP PUSH2 0x21F1 JUMP JUMPDEST PUSH2 0x21E2 DUP10 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x2142 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0x220A JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x3E17 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x3E17 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x2257 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2274 JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x2271 JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x22B5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22CA DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x231D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2327 PUSH2 0x3F1D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xC SLOAD DUP3 GT PUSH2 0x233B JUMPI PUSH1 0x0 PUSH2 0x2341 JUMP JUMPDEST PUSH1 0xC SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x8 SLOAD DUP2 LT ISZERO PUSH2 0x238B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x23FE DUP3 DUP8 DUP8 PUSH2 0x3F68 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x245F JUMPI PUSH2 0x2415 DUP8 DUP7 DUP5 DUP5 DUP11 PUSH1 0x2 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x2 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND SWAP3 SWAP1 DUP11 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x2467 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x24B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x24D0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2545 JUMPI PUSH2 0x24F2 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x2506 JUMPI POP PUSH2 0x2504 PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x2545 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2590 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2606 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4944454E544943414C5F414444524553534553 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2627 JUMPI DUP4 PUSH2 0x2629 JUMP JUMPDEST DUP5 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2675 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A45524F5F41444452455353 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x26DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2703 JUMPI DUP1 DUP3 PUSH2 0x2706 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ PUSH2 0x2734 JUMPI PUSH1 0x2 PUSH2 0x2737 JUMP JUMPDEST PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2750 JUMPI POP PUSH1 0x2 PUSH2 0x275D JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH2 0x277B DUP5 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x2820 JUMPI PUSH1 0x0 PUSH2 0x27A3 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x27B9 DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x27C9 JUMPI PUSH1 0x0 PUSH2 0x27DD JUMP JUMPDEST PUSH2 0x27DD DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP12 DUP6 GT PUSH2 0x27EC JUMPI DUP5 PUSH2 0x27EE JUMP JUMPDEST DUP12 JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x2806 JUMPI PUSH2 0x2801 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x2809 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP14 SUB SWAP8 POP SWAP6 POP POP POP DUP4 DUP10 SUB SWAP2 POP POP DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x2837 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x284D DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x285D JUMPI PUSH1 0x0 PUSH2 0x2871 JUMP JUMPDEST PUSH2 0x2871 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP12 DUP7 GT PUSH2 0x2880 JUMPI DUP6 PUSH2 0x2882 JUMP JUMPDEST DUP12 JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x289A JUMPI PUSH2 0x2895 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x289D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 DUP14 SUB SWAP8 POP SWAP5 POP POP POP DUP9 DUP5 ADD SWAP2 POP POP DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST POP DUP9 SWAP4 POP DUP8 SWAP1 POP DUP7 JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH2 0x28E0 DUP13 DUP13 DUP13 DUP13 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP10 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x28F6 DUP4 DUP9 PUSH2 0x43F2 JUMP JUMPDEST SWAP3 POP PUSH2 0x2902 DUP5 DUP10 PUSH2 0x44AE JUMP JUMPDEST SWAP4 POP PUSH2 0x2914 DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH1 0x1 DUP14 EQ PUSH2 0x2931 JUMPI PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x293E JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x294B DUP2 DUP16 DUP9 PUSH2 0x39BF JUMP JUMPDEST POP POP POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x457D JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC SSTORE PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x2B01 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x125394D551919250D251539517D25394155517D05353D55395 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x2B11 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x2B5B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2B6F DUP6 PUSH2 0x3E5 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2B83 DUP3 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BA9 DUP4 PUSH2 0x2B9D DUP9 PUSH2 0x3E8 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x2BB4 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2D29 JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP4 MSTORE PUSH1 0x10 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2CE7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xDEF0D2CB PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xDEF0D2CB SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E7D PUSH1 0xA DUP4 SWAP1 EXP PUSH2 0x2E71 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x2ECF SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EF4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F26 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F3B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x2F50 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x2F64 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F85 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x2FAE JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2FA4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 SWAP6 POP PUSH1 0x0 PUSH2 0x2FC6 PUSH1 0x2 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FD8 JUMPI POP DUP9 DUP2 GT ISZERO JUMPDEST ISZERO PUSH2 0x3100 JUMPI DUP7 DUP6 ISZERO PUSH2 0x3063 JUMPI PUSH2 0x301D PUSH1 0x1 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x300C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x302A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x303E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x3063 JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3070 PUSH1 0x2 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x3087 PUSH1 0x1 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x30A3 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xB SLOAD SWAP10 ADD SWAP9 PUSH2 0x30BD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x30D5 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH2 0x30E5 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x30F2 PUSH1 0x2 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x2FC9 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x311D JUMPI PUSH1 0xA SLOAD PUSH2 0x311D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x312A JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x3136 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x31AC JUMPI PUSH2 0x3174 PUSH1 0x1 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3163 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x3181 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x3195 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP3 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x31F7 JUMPI PUSH2 0x31F0 DUP8 DUP5 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x31CA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x31DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x473D JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP3 POP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xA SLOAD PUSH2 0x3217 SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP7 DUP9 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x322B JUMPI POP DUP9 PUSH2 0x3228 PUSH2 0x1483 JUMP JUMPDEST LT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x84EAF240E0E4D2C6CA40DAD2E6DAC2E8C6D PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE PUSH1 0x60 SWAP4 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x32DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x32C8 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0xFF DUP2 MLOAD LT PUSH2 0x3334 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x13DC99195C88139D5B58995C881A5CC8195E18D959591959 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x333E PUSH2 0x5859 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3370 PUSH2 0x4C3C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE POP SWAP1 POP PUSH1 0x11 PUSH1 0x0 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 PUSH1 0x40 ADD MLOAD SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP SWAP1 PUSH1 0x1 DUP3 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE POP DUP1 PUSH1 0x10 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD SSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD SSTORE SWAP1 POP POP PUSH2 0x34A1 DUP6 DUP8 PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x34AF JUMPI PUSH2 0x34AF DUP6 DUP8 PUSH2 0x4C7A JUMP JUMPDEST PUSH2 0x34BE DUP6 DUP8 DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D04 JUMP JUMPDEST PUSH1 0x40 ADD MLOAD SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x34EA JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x34E7 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3549 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D4C JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT DUP5 ADD SWAP1 DUP2 LT PUSH2 0x362B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE PUSH1 0x11 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0xE0 DUP6 ADD MLOAD DUP2 SLOAD SWAP3 SWAP4 POP DUP4 SWAP3 DUP2 LT PUSH2 0x3664 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP4 DUP3 MSTORE PUSH1 0x10 DUP4 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x7 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 SWAP3 MSTORE KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x36A9 JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE PUSH2 0x36D1 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x36E7 JUMPI PUSH2 0x36E7 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4EB1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3745 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x375B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x37E0 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37DB DUP4 DUP4 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x37EB JUMP JUMPDEST PUSH2 0x37EB DUP5 DUP5 DUP5 PUSH2 0x39BF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x38A3 JUMPI PUSH1 0x0 PUSH2 0x380D DUP12 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP1 POP PUSH2 0x3824 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3836 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x3860 JUMPI DUP11 SWAP5 POP PUSH2 0x3854 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x389D JUMP JUMPDEST PUSH2 0x3878 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3885 DUP2 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP PUSH2 0x389A DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x393E JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x393E JUMPI PUSH1 0x0 PUSH2 0x38B9 DUP12 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP PUSH2 0x38D0 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x38E2 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x390C JUMPI DUP11 SWAP5 POP PUSH2 0x3900 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x393C JUMP JUMPDEST PUSH2 0x3924 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3931 DUP2 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP DUP1 DUP5 SUB SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x3973 PUSH1 0x64 PUSH2 0x2E71 PUSH2 0x3956 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3991 DUP4 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x39B9 JUMPI PUSH2 0x39A4 DUP4 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST DUP3 ADD SWAP2 POP PUSH2 0x39B2 DUP4 DUP3 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH2 0x3994 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH25 0x7472616E7366657228616464726573732C75696E7432353629 PUSH1 0x38 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3A68 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A49 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3ACA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3ACF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3AFD JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3AFD JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x3B40 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x3BFC JUMPI PUSH1 0x0 PUSH2 0x3B78 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3B8E DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3B9E JUMPI PUSH1 0x0 PUSH2 0x3BB2 JUMP JUMPDEST PUSH2 0x3BB2 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x3BCA JUMPI PUSH2 0x3BC5 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3BCD JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP6 POP DUP12 DUP7 GT ISZERO PUSH2 0x3BE8 JUMPI DUP12 SWAP6 POP PUSH2 0x3BE5 DUP7 DUP12 DUP14 PUSH2 0x3E17 JUMP JUMPDEST SWAP5 POP JUMPDEST POP POP POP DUP3 DUP10 SUB SWAP4 POP POP DUP2 DUP8 SUB DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x3C13 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3C29 DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3C39 JUMPI PUSH1 0x0 PUSH2 0x3C4D JUMP JUMPDEST PUSH2 0x3C4D DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x3C65 JUMPI PUSH2 0x3C60 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3C68 JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP5 POP DUP12 DUP6 GT ISZERO PUSH2 0x3C83 JUMPI DUP12 SWAP5 POP PUSH2 0x3C80 DUP6 DUP13 DUP13 PUSH2 0x3E17 JUMP JUMPDEST SWAP6 POP JUMPDEST POP POP POP DUP2 DUP10 SUB SWAP4 POP POP DUP7 DUP3 ADD DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x3CB2 PUSH2 0x2710 PUSH2 0x2E71 DUP8 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CCB PUSH1 0x64 PUSH2 0x2E71 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CE2 PUSH2 0x21B8 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP13 DUP3 GT PUSH2 0x3D19 JUMPI DUP8 SWAP6 POP PUSH2 0x3D00 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH2 0x3D12 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D85 JUMP JUMPDEST DUP13 SWAP2 POP PUSH2 0x3D3D DUP10 DUP12 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH3 0xF4240 DUP6 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP6 POP PUSH2 0x3D70 DUP11 DUP11 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH2 0x2710 DUP14 SWAP1 SUB PUSH2 0x3D64 DUP7 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D82 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x1 DUP15 EQ ISZERO PUSH2 0x3DA0 JUMPI PUSH2 0x3D99 DUP2 DUP14 DUP14 PUSH2 0x2E57 JUMP JUMPDEST SWAP7 POP PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x2 DUP15 EQ ISZERO PUSH2 0x3DB7 JUMPI PUSH2 0x3DB4 DUP2 DUP14 DUP14 PUSH2 0x5039 JUMP JUMPDEST SWAP7 POP JUMPDEST POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x3E6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH26 0x125394D551919250D251539517D3D55514155517D05353D55395 PUSH1 0x32 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x3E7A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x3EC4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3EDC PUSH2 0x3E8 PUSH2 0x3D64 DUP7 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EF6 PUSH2 0x3E5 PUSH2 0x3D64 DUP7 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3F13 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x3F06 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x3FB2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FD7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3FEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4009 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x401E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4033 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4047 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP5 SWAP2 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x406B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x4094 JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x408A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x40A8 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x40BA JUMPI POP DUP9 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x41BC JUMPI DUP7 DUP6 ISZERO PUSH2 0x411F JUMPI PUSH2 0x40D9 PUSH1 0x2 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x40E6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x40FA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x411F JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412C PUSH1 0x1 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x4143 PUSH1 0x2 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x415F DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xA SLOAD SWAP10 ADD SWAP9 PUSH2 0x4179 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x4191 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH2 0x41A1 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x41AE PUSH1 0x1 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x40AB JUMP JUMPDEST DUP2 ISZERO PUSH2 0x41D9 JUMPI PUSH1 0xB SLOAD PUSH2 0x41D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x41E6 JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x41F2 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x4242 JUMPI PUSH2 0x420A PUSH1 0x2 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4217 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x422B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP4 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x428D JUMPI PUSH2 0x4286 DUP8 DUP6 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4260 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4275 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x5053 JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP4 POP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH2 0x42AD SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP8 DUP8 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x42C1 JUMPI POP DUP9 PUSH2 0x42BE PUSH2 0x1483 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1CD95B1B081D1BC81D185C99D95D0819985A5B1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4333 PUSH1 0xA DUP6 SWAP1 EXP PUSH2 0x2E71 DUP8 PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP10 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x5105 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x4361 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4392 DUP6 PUSH2 0x2E71 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP11 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x43C4 DUP10 DUP10 DUP10 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP13 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP PUSH2 0x43DF PUSH2 0x43D7 DUP11 PUSH2 0x273D JUMP JUMPDEST DUP7 DUP7 DUP11 PUSH2 0x5156 JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4422 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x4464 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x443D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4451 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4428 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x447D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x4494 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4468 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x44DE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x452D JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x44F9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x450D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x44E4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4546 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x455D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4531 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x45A3 JUMPI DUP1 PUSH2 0x45BE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x460A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x461E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3B40 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4704 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4679 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x46FF DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x46DE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x46F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4735 JUMP JUMPDEST PUSH2 0x4735 DUP6 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4714 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4728 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x463B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x474E DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x480C JUMPI PUSH2 0x478B PUSH2 0x4773 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x2E71 DUP12 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 PUSH1 0xA DUP9 SWAP1 EXP PUSH2 0x2E71 DUP13 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x479C JUMPI PUSH1 0x1 PUSH2 0x479E JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x139BDD08115B9BDD59DA0813DD5D1C1D5D08105B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4800 DUP11 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP4 POP DUP9 DUP3 ADD SWAP3 POP PUSH2 0x4813 JUMP JUMPDEST DUP10 SWAP4 POP DUP9 SWAP3 POP JUMPDEST POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x4838 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4889 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x489D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x48B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ PUSH2 0x48CF JUMPI DUP3 PUSH1 0x0 PUSH2 0x48D3 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAD5C4648 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4927 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x493B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND SWAP1 DUP8 AND EQ ISZERO PUSH2 0x4AC5 JUMPI PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x1FAC4F7B PUSH1 0xE2 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP8 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x84 DUP6 ADD SWAP1 DUP2 MSTORE DUP5 MLOAD PUSH1 0xA4 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP8 AND SWAP7 PUSH4 0x7EB13DEC SWAP7 DUP12 SWAP7 DUP12 SWAP7 SWAP5 SWAP6 SWAP1 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xC4 DUP7 ADD SWAP3 SWAP2 DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49F1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x49D9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4A1E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4AB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x4AC0 DUP9 DUP6 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4BCA JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x7EB13DEC SWAP2 DUP7 SWAP2 DUP7 SWAP2 DUP14 SWAP2 SWAP1 POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B62 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B4A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4B8F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4BB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4BC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFFF6CAE9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4C1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4C2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x13 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 DUP2 SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP5 DUP4 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 PUSH2 0x4CB6 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE DUP4 DUP3 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x4CEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4CC3 DUP6 DUP6 PUSH2 0x5542 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 DUP2 KECCAK256 DUP8 SWAP1 SSTORE DUP7 DUP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SSTORE POP POP JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD SWAP8 DUP6 MSTORE DUP5 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP8 DUP7 MSTORE DUP5 MSTORE DUP3 DUP6 KECCAK256 SWAP8 DUP6 MSTORE SWAP7 DUP4 MSTORE SWAP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP3 SWAP1 MSTORE SWAP1 MSTORE DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP7 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 DUP6 MSTORE SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP1 DUP3 LT PUSH2 0x4DBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207175657565 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 PUSH1 0x1 DUP5 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4E28 JUMPI DUP6 DUP4 EQ ISZERO PUSH2 0x4DF9 JUMPI PUSH2 0x4E28 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP4 SWAP1 SSTORE DUP3 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4DE4 JUMP JUMPDEST POP DUP1 DUP6 EQ PUSH2 0x4E6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642064617461 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP5 DUP2 MSTORE PUSH1 0x1 DUP1 DUP7 MSTORE DUP3 DUP3 KECCAK256 SWAP5 DUP3 MSTORE SWAP4 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4EBE DUP5 DUP5 PUSH2 0x5542 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 DUP4 EQ PUSH2 0x4F06 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207072696365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP5 DUP4 MSTORE DUP4 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 DUP2 SWAP1 SSTORE SWAP4 DUP5 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x4F92 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4F73 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4FF4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4FF9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x36E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58D1 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7D DUP4 PUSH2 0x2E71 DUP7 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5064 DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 GT ISZERO PUSH2 0x480C JUMPI PUSH2 0x50A1 PUSH2 0x5089 DUP3 PUSH2 0x2E71 DUP11 PUSH1 0xA DUP11 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP9 PUSH2 0x2E71 DUP12 PUSH1 0xA DUP12 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x50B2 JUMPI PUSH1 0x1 PUSH2 0x50B4 JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x139BDD08115B9BDD59DA08125B9C1D5D08105B5BDD5B9D PUSH1 0x4A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x5148 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5142 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x5131 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x513A JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x511A JUMP JUMPDEST POP PUSH2 0x275D JUMP JUMPDEST DUP2 ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 PUSH1 0x0 DUP1 PUSH2 0x5167 DUP10 DUP8 PUSH2 0x4C4A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5195 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x51C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP3 DUP5 LT DUP1 ISZERO PUSH2 0x51D7 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x542B JUMPI PUSH1 0x0 PUSH2 0x51E8 DUP13 DUP11 PUSH2 0x55E4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x51F5 JUMPI POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x51FD PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD AND SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE DUP5 MLOAD DUP6 SWAP1 DUP9 SWAP1 DUP2 LT PUSH2 0x527F 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 PUSH1 0x0 DUP2 PUSH1 0xA0 ADD MLOAD DUP9 GT PUSH2 0x52B2 JUMPI DUP8 PUSH2 0x52B8 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD JUMPDEST SWAP1 POP DUP1 DUP3 PUSH1 0xA0 ADD MLOAD SUB DUP3 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 DUP5 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x52D7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD SWAP8 DUP2 SWAP1 SUB SWAP8 ISZERO PUSH2 0x5399 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH1 0x10 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA892D68F8384663266856EFCC4ED863CA1D9D7E373285F93BD251549EB82490E DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x53A2 DUP3 PUSH2 0x5643 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD34322DF57B73514D4BA1028D9EDEEB8BFC03224B8035B6C1BFE04FB0F06A55C DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x51C8 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x5507 JUMPI PUSH2 0x543B DUP3 DUP6 PUSH2 0x570F JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5467 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP DUP1 MLOAD DUP7 MLOAD GT ISZERO PUSH2 0x54B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x125B99195E08125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x5505 JUMPI PUSH2 0x54E6 DUP11 PUSH2 0x2E71 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x54CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x54F2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x54B4 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x45BE JUMPI DUP4 PUSH2 0x5532 DUP5 PUSH1 0xA DUP6 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST DUP2 PUSH2 0x5539 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x1 DUP5 EQ ISZERO PUSH2 0x559F JUMPI JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x559A JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x5595 JUMPI PUSH2 0x559A JUMP JUMPDEST PUSH2 0x5566 JUMP JUMPDEST PUSH2 0x55DD JUMP JUMPDEST PUSH1 0x2 DUP5 EQ ISZERO PUSH2 0x55DD JUMPI JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x55DD JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x55D8 JUMPI PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x55A9 JUMP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x5655 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x57E0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 MLOAD DUP3 GT ISZERO PUSH2 0x5758 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x92DCECC2D8D2C840D8CADCCEE8D PUSH1 0x93 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP3 EQ ISZERO PUSH2 0x5768 JUMPI POP DUP2 PUSH2 0x2737 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5792 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x57AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x57C0 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5798 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE SWAP6 DUP3 MSTORE PUSH1 0x1 DUP1 DUP3 MSTORE DUP4 DUP4 KECCAK256 SWAP6 DUP4 MSTORE SWAP5 SWAP1 MSTORE KECCAK256 DUP1 SLOAD SWAP1 SWAP3 ADD SWAP1 SWAP2 SSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID SWAP14 CALLVALUE 0xEE 0xE0 0xC3 LOG3 0xCD 0x21 ORIGIN 0xD4 0x29 DUP8 0x2E PC XOR EXTCODESIZE SIGNEXTEND LOG2 SWAP7 0xCD 0xBA BLOCKHASH SWAP5 DUP4 EXP 0xA5 DUP11 SWAP16 0xB3 COINBASE PUSH9 0xEF5472616E73666572 0x48 PUSH6 0x6C7065723A20 GASLIMIT SLOAD 0x48 0x5F SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0x5C 0xEA 0x5D 0x2C 0xCC 0xE1 PUSH11 0xAB6226DE87935AFEA61FF CREATE DUP15 ISZERO DUP11 JUMP DUP4 LOG1 CALL 0xE0 LOG1 DELEGATECALL 0x49 BLOCKHASH CODESIZE PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "134:20653:0:-;;;5470:1:1;5446:25;;2736:7;:20;;-1:-1:-1;;;;;;2736:20:1;2746:10;2736:20;;;-1:-1:-1;;134:20653:0;-1:-1:-1;134:20653:0;;"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x17E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x53B4B9D EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x19EDA4BC EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x217A4B70 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0x346970F9 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x38BDE791 EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x573DD9DB EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x58F85880 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0x6069F080 EQ PUSH2 0x4B0 JUMPI DUP1 PUSH4 0x63C69F08 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0x7DE81D8B EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x856652E9 EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x88D519C4 EQ PUSH2 0x60F JUMPI DUP1 PUSH4 0x950F59B2 EQ PUSH2 0x624 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x667 JUMPI DUP1 PUSH4 0x9B2CB5D8 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0xA5CDC8FC EQ PUSH2 0x691 JUMPI DUP1 PUSH4 0xA6B63EB8 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0xA8AA1B31 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xBC9113F0 EQ PUSH2 0x71F JUMPI DUP1 PUSH4 0xC2FFEA8F EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0xC55DAE63 EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xCB160866 EQ PUSH2 0x7B5 JUMPI DUP1 PUSH4 0xDB7B373E EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0xDEB65AC3 EQ PUSH2 0x805 JUMPI DUP1 PUSH4 0xE52FA98B EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0xE68CC597 EQ PUSH2 0x865 JUMPI DUP1 PUSH4 0xF12DBB9F EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xF1564C0B EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xF1A2E849 EQ PUSH2 0x90B JUMPI DUP1 PUSH4 0xF361DF08 EQ PUSH2 0x920 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x935 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x278 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2DF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x302 PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xC1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD29 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP10 DUP11 AND DUP2 MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x100 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xD79 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x487 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x46F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xF1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF22 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1020 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x108C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x581 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x569 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x11DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x120F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x14FC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1502 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x6DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x1770 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1A95 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1AA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1B1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1C89 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1E97 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x811 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x828 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x852 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1FC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x20CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x2215 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2476 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x259A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x25A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x97A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x34B73B30B634B21039B2B73232B9 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP1 DUP4 ADD DUP5 MSTORE SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0xA12 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA37 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xA4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE PUSH1 0x0 PUSH2 0xA65 DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA72 DUP3 PUSH2 0x273D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0xA82 DUP4 PUSH1 0x0 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 PUSH2 0xAC7 DUP6 DUP13 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xAA1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xAB6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST POP POP POP POP SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0xADC JUMPI POP PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAED DUP12 DUP8 DUP5 DUP8 DUP8 DUP15 DUP15 PUSH2 0x28CB JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP SWAP1 SWAP2 POP PUSH2 0xB07 SWAP1 POP DUP13 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP12 POP DUP2 DUP2 EQ ISZERO PUSH2 0xB18 JUMPI POP POP PUSH2 0xB2F JUMP JUMPDEST PUSH2 0xB22 DUP6 DUP6 PUSH2 0x29AC JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xA87 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x29B9 JUMP JUMPDEST DUP10 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0xB7D JUMPI PUSH2 0xB78 DUP11 DUP7 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0xBA3 JUMP JUMPDEST PUSH2 0xBA3 DUP11 DUP7 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST DUP9 ADD SWAP8 POP JUMPDEST POP POP POP POP POP PUSH1 0x1 PUSH1 0x12 DUP2 SWAP1 SSTORE POP SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD PUSH17 0x48796272696458204F72646572426F6F6B PUSH1 0x78 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH2 0xC13 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xC5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xC76 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xCC7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP2 GT ISZERO PUSH2 0xD10 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP6 SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x8 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH2 0x100 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0xDAC PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP5 SWAP2 PUSH2 0xE2F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xE56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xE74 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xE92 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xEB0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0xEEC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xF62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xF7C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xFCD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 GT ISZERO PUSH2 0x1016 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1080 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x106C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x109C DUP6 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 EQ ISZERO PUSH2 0x10D7 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10B9 JUMPI POP DUP5 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x10D2 JUMPI PUSH2 0x10C8 DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10AA JUMP JUMPDEST PUSH2 0x1109 JUMP JUMPDEST PUSH1 0x2 DUP7 EQ ISZERO PUSH2 0x1109 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10F0 JUMPI POP DUP5 DUP3 GT ISZERO JUMPDEST ISZERO PUSH2 0x1109 JUMPI PUSH2 0x10FF DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10E1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x11D2 JUMPI DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1139 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1166 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x1174 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP3 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11A4 DUP8 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x11B0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11C6 DUP8 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1179 JUMP JUMPDEST POP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x11F4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1251 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x126E JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x126B JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x12AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x12C4 DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1317 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1321 PUSH2 0x2DDB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xD SLOAD DUP3 GT PUSH2 0x1335 JUMPI PUSH1 0x0 PUSH2 0x133B JUMP JUMPDEST PUSH1 0xD SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x134E PUSH1 0x8 SLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x1396 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x1409 DUP4 DUP9 DUP9 PUSH2 0x2E85 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x146A JUMPI PUSH2 0x1420 DUP9 DUP8 DUP6 DUP5 DUP12 PUSH1 0x1 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP11 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND SWAP3 SWAP1 DUP12 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x1472 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x14AC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 DUP2 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x0 EQ PUSH2 0x14F7 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x14EC PUSH1 0x9 SLOAD PUSH1 0xA EXP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x14F3 JUMPI INVALID JUMPDEST DIV SWAP3 POP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1542 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH2 0x154F PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE CALLER EQ PUSH2 0x160A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x13DDDB995C88125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1613 DUP2 PUSH2 0x3532 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0xC0 ADD MLOAD EQ PUSH2 0x1632 JUMPI PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x163F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x1654 DUP2 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x36EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC0 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 EQ ISZERO PUSH2 0x16E4 JUMPI PUSH1 0xD DUP2 SWAP1 SSTORE PUSH2 0x16EA JUMP JUMPDEST PUSH1 0xC DUP2 SWAP1 SSTORE JUMPDEST DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD32766082EB3D1EE39881604CAE4EA25B61931060C8FBC7D5F05556040053B57 DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x17BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2327A92124A22222A7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x1806 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x188D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD21220A7 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0xD21220A7 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x190D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP8 AND EQ DUP1 ISZERO PUSH2 0x1956 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x198E JUMPI POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x198E JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x19D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x151BDAD95B8814185A5C88125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xB DUP1 SLOAD SWAP4 DUP10 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE PUSH1 0x7 DUP6 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP2 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x9 SSTORE POP POP PUSH1 0x8 SSTORE POP POP PUSH1 0x1E PUSH1 0xE SSTORE POP POP PUSH1 0x32 PUSH1 0xF SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x1B4B SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x1B6C DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1B79 DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x1B8C DUP5 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x1C2F JUMPI PUSH1 0x0 PUSH2 0x1BA9 DUP7 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x1BBE JUMPI POP PUSH2 0x1C2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BD8 DUP10 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x1BEF DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x1C03 DUP8 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP4 EQ ISZERO PUSH2 0x1C16 JUMPI POP POP POP POP PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x1C20 DUP9 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1B91 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP6 EQ PUSH2 0x1C4D JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x2AAF JUMP JUMPDEST DUP11 ADD SWAP10 POP JUMPDEST POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1CC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1CE3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1D87 JUMPI SELFBALANCE DUP1 ISZERO PUSH2 0x1D81 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA SLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E40 JUMPI PUSH1 0x0 PUSH2 0x1E24 PUSH1 0x2 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E34 JUMPI PUSH1 0x0 PUSH2 0x1E38 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x0 PUSH2 0x1E62 PUSH1 0x1 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E72 JUMPI PUSH1 0x0 PUSH2 0x1E76 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP JUMPDEST DUP1 ISZERO PUSH2 0x1E8B JUMPI PUSH2 0x1E8B DUP5 DUP5 DUP4 PUSH2 0x39BF JUMP JUMPDEST POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1EDD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1EF7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1F6C JUMPI PUSH2 0x1F19 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1F2D JUMPI POP PUSH2 0x1F2B PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1F6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1FB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1FCF DUP6 PUSH2 0x3B47 JUMP JUMPDEST SWAP1 POP DUP4 PUSH4 0xFFFFFFFF AND DUP2 GT PUSH2 0x1FE4 JUMPI DUP1 PUSH2 0x1FEC JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2018 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2045 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH2 0x2055 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x206E JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT JUMPDEST ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP6 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2086 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x209C DUP8 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x20AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x20C4 DUP8 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x205A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x20FC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x211D DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x212A DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x213D DUP6 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x21F1 JUMPI PUSH1 0x0 PUSH2 0x215A DUP6 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x3B59 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x216F JUMPI POP PUSH2 0x21F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2189 DUP9 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x3C97 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x21A1 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x21C5 PUSH2 0x21B8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST DUP9 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP3 EQ ISZERO PUSH2 0x21D8 JUMPI POP POP POP POP PUSH2 0x21F1 JUMP JUMPDEST PUSH2 0x21E2 DUP10 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x2142 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0x220A JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x3E17 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x3E17 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x2257 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2274 JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x2271 JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x22B5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22CA DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x231D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2327 PUSH2 0x3F1D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xC SLOAD DUP3 GT PUSH2 0x233B JUMPI PUSH1 0x0 PUSH2 0x2341 JUMP JUMPDEST PUSH1 0xC SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x8 SLOAD DUP2 LT ISZERO PUSH2 0x238B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x23FE DUP3 DUP8 DUP8 PUSH2 0x3F68 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x245F JUMPI PUSH2 0x2415 DUP8 DUP7 DUP5 DUP5 DUP11 PUSH1 0x2 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x2 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND SWAP3 SWAP1 DUP11 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x2467 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x24B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x24D0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2545 JUMPI PUSH2 0x24F2 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x2506 JUMPI POP PUSH2 0x2504 PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x2545 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2590 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2606 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4944454E544943414C5F414444524553534553 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2627 JUMPI DUP4 PUSH2 0x2629 JUMP JUMPDEST DUP5 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2675 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A45524F5F41444452455353 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x26DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2703 JUMPI DUP1 DUP3 PUSH2 0x2706 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ PUSH2 0x2734 JUMPI PUSH1 0x2 PUSH2 0x2737 JUMP JUMPDEST PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2750 JUMPI POP PUSH1 0x2 PUSH2 0x275D JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH2 0x277B DUP5 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x2820 JUMPI PUSH1 0x0 PUSH2 0x27A3 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x27B9 DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x27C9 JUMPI PUSH1 0x0 PUSH2 0x27DD JUMP JUMPDEST PUSH2 0x27DD DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP12 DUP6 GT PUSH2 0x27EC JUMPI DUP5 PUSH2 0x27EE JUMP JUMPDEST DUP12 JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x2806 JUMPI PUSH2 0x2801 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x2809 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP14 SUB SWAP8 POP SWAP6 POP POP POP DUP4 DUP10 SUB SWAP2 POP POP DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x2837 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x284D DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x285D JUMPI PUSH1 0x0 PUSH2 0x2871 JUMP JUMPDEST PUSH2 0x2871 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP12 DUP7 GT PUSH2 0x2880 JUMPI DUP6 PUSH2 0x2882 JUMP JUMPDEST DUP12 JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x289A JUMPI PUSH2 0x2895 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x289D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 DUP14 SUB SWAP8 POP SWAP5 POP POP POP DUP9 DUP5 ADD SWAP2 POP POP DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST POP DUP9 SWAP4 POP DUP8 SWAP1 POP DUP7 JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH2 0x28E0 DUP13 DUP13 DUP13 DUP13 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP10 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x28F6 DUP4 DUP9 PUSH2 0x43F2 JUMP JUMPDEST SWAP3 POP PUSH2 0x2902 DUP5 DUP10 PUSH2 0x44AE JUMP JUMPDEST SWAP4 POP PUSH2 0x2914 DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH1 0x1 DUP14 EQ PUSH2 0x2931 JUMPI PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x293E JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x294B DUP2 DUP16 DUP9 PUSH2 0x39BF JUMP JUMPDEST POP POP POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x457D JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC SSTORE PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x2B01 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x125394D551919250D251539517D25394155517D05353D55395 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x2B11 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x2B5B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2B6F DUP6 PUSH2 0x3E5 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2B83 DUP3 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BA9 DUP4 PUSH2 0x2B9D DUP9 PUSH2 0x3E8 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x2BB4 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2D29 JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP4 MSTORE PUSH1 0x10 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2CE7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xDEF0D2CB PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xDEF0D2CB SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E7D PUSH1 0xA DUP4 SWAP1 EXP PUSH2 0x2E71 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x2ECF SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EF4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F26 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F3B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x2F50 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x2F64 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F85 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x2FAE JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2FA4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 SWAP6 POP PUSH1 0x0 PUSH2 0x2FC6 PUSH1 0x2 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FD8 JUMPI POP DUP9 DUP2 GT ISZERO JUMPDEST ISZERO PUSH2 0x3100 JUMPI DUP7 DUP6 ISZERO PUSH2 0x3063 JUMPI PUSH2 0x301D PUSH1 0x1 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x300C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x302A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x303E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x3063 JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3070 PUSH1 0x2 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x3087 PUSH1 0x1 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x30A3 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xB SLOAD SWAP10 ADD SWAP9 PUSH2 0x30BD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x30D5 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH2 0x30E5 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x30F2 PUSH1 0x2 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x2FC9 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x311D JUMPI PUSH1 0xA SLOAD PUSH2 0x311D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x312A JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x3136 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x31AC JUMPI PUSH2 0x3174 PUSH1 0x1 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3163 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x3181 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x3195 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP3 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x31F7 JUMPI PUSH2 0x31F0 DUP8 DUP5 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x31CA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x31DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x473D JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP3 POP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xA SLOAD PUSH2 0x3217 SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP7 DUP9 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x322B JUMPI POP DUP9 PUSH2 0x3228 PUSH2 0x1483 JUMP JUMPDEST LT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x84EAF240E0E4D2C6CA40DAD2E6DAC2E8C6D PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE PUSH1 0x60 SWAP4 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x32DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x32C8 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0xFF DUP2 MLOAD LT PUSH2 0x3334 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x13DC99195C88139D5B58995C881A5CC8195E18D959591959 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x333E PUSH2 0x5859 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3370 PUSH2 0x4C3C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE POP SWAP1 POP PUSH1 0x11 PUSH1 0x0 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 PUSH1 0x40 ADD MLOAD SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP SWAP1 PUSH1 0x1 DUP3 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE POP DUP1 PUSH1 0x10 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD SSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD SSTORE SWAP1 POP POP PUSH2 0x34A1 DUP6 DUP8 PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x34AF JUMPI PUSH2 0x34AF DUP6 DUP8 PUSH2 0x4C7A JUMP JUMPDEST PUSH2 0x34BE DUP6 DUP8 DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D04 JUMP JUMPDEST PUSH1 0x40 ADD MLOAD SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x34EA JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x34E7 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3549 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D4C JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT DUP5 ADD SWAP1 DUP2 LT PUSH2 0x362B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE PUSH1 0x11 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0xE0 DUP6 ADD MLOAD DUP2 SLOAD SWAP3 SWAP4 POP DUP4 SWAP3 DUP2 LT PUSH2 0x3664 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP4 DUP3 MSTORE PUSH1 0x10 DUP4 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x7 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 SWAP3 MSTORE KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x36A9 JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE PUSH2 0x36D1 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x36E7 JUMPI PUSH2 0x36E7 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4EB1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3745 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x375B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x37E0 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37DB DUP4 DUP4 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x37EB JUMP JUMPDEST PUSH2 0x37EB DUP5 DUP5 DUP5 PUSH2 0x39BF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x38A3 JUMPI PUSH1 0x0 PUSH2 0x380D DUP12 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP1 POP PUSH2 0x3824 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3836 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x3860 JUMPI DUP11 SWAP5 POP PUSH2 0x3854 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x389D JUMP JUMPDEST PUSH2 0x3878 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3885 DUP2 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP PUSH2 0x389A DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x393E JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x393E JUMPI PUSH1 0x0 PUSH2 0x38B9 DUP12 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP PUSH2 0x38D0 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x38E2 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x390C JUMPI DUP11 SWAP5 POP PUSH2 0x3900 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x393C JUMP JUMPDEST PUSH2 0x3924 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3931 DUP2 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP DUP1 DUP5 SUB SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x3973 PUSH1 0x64 PUSH2 0x2E71 PUSH2 0x3956 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3991 DUP4 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x39B9 JUMPI PUSH2 0x39A4 DUP4 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST DUP3 ADD SWAP2 POP PUSH2 0x39B2 DUP4 DUP3 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH2 0x3994 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH25 0x7472616E7366657228616464726573732C75696E7432353629 PUSH1 0x38 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3A68 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A49 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3ACA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3ACF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3AFD JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3AFD JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x3B40 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x3BFC JUMPI PUSH1 0x0 PUSH2 0x3B78 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3B8E DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3B9E JUMPI PUSH1 0x0 PUSH2 0x3BB2 JUMP JUMPDEST PUSH2 0x3BB2 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x3BCA JUMPI PUSH2 0x3BC5 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3BCD JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP6 POP DUP12 DUP7 GT ISZERO PUSH2 0x3BE8 JUMPI DUP12 SWAP6 POP PUSH2 0x3BE5 DUP7 DUP12 DUP14 PUSH2 0x3E17 JUMP JUMPDEST SWAP5 POP JUMPDEST POP POP POP DUP3 DUP10 SUB SWAP4 POP POP DUP2 DUP8 SUB DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x3C13 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3C29 DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3C39 JUMPI PUSH1 0x0 PUSH2 0x3C4D JUMP JUMPDEST PUSH2 0x3C4D DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x3C65 JUMPI PUSH2 0x3C60 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3C68 JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP5 POP DUP12 DUP6 GT ISZERO PUSH2 0x3C83 JUMPI DUP12 SWAP5 POP PUSH2 0x3C80 DUP6 DUP13 DUP13 PUSH2 0x3E17 JUMP JUMPDEST SWAP6 POP JUMPDEST POP POP POP DUP2 DUP10 SUB SWAP4 POP POP DUP7 DUP3 ADD DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x3CB2 PUSH2 0x2710 PUSH2 0x2E71 DUP8 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CCB PUSH1 0x64 PUSH2 0x2E71 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CE2 PUSH2 0x21B8 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP13 DUP3 GT PUSH2 0x3D19 JUMPI DUP8 SWAP6 POP PUSH2 0x3D00 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH2 0x3D12 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D85 JUMP JUMPDEST DUP13 SWAP2 POP PUSH2 0x3D3D DUP10 DUP12 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH3 0xF4240 DUP6 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP6 POP PUSH2 0x3D70 DUP11 DUP11 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH2 0x2710 DUP14 SWAP1 SUB PUSH2 0x3D64 DUP7 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D82 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x1 DUP15 EQ ISZERO PUSH2 0x3DA0 JUMPI PUSH2 0x3D99 DUP2 DUP14 DUP14 PUSH2 0x2E57 JUMP JUMPDEST SWAP7 POP PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x2 DUP15 EQ ISZERO PUSH2 0x3DB7 JUMPI PUSH2 0x3DB4 DUP2 DUP14 DUP14 PUSH2 0x5039 JUMP JUMPDEST SWAP7 POP JUMPDEST POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x3E6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH26 0x125394D551919250D251539517D3D55514155517D05353D55395 PUSH1 0x32 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x3E7A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x3EC4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3EDC PUSH2 0x3E8 PUSH2 0x3D64 DUP7 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EF6 PUSH2 0x3E5 PUSH2 0x3D64 DUP7 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3F13 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x3F06 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x3FB2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FD7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3FEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4009 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x401E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4033 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4047 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP5 SWAP2 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x406B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x4094 JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x408A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x40A8 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x40BA JUMPI POP DUP9 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x41BC JUMPI DUP7 DUP6 ISZERO PUSH2 0x411F JUMPI PUSH2 0x40D9 PUSH1 0x2 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x40E6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x40FA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x411F JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412C PUSH1 0x1 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x4143 PUSH1 0x2 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x415F DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xA SLOAD SWAP10 ADD SWAP9 PUSH2 0x4179 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x4191 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH2 0x41A1 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x41AE PUSH1 0x1 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x40AB JUMP JUMPDEST DUP2 ISZERO PUSH2 0x41D9 JUMPI PUSH1 0xB SLOAD PUSH2 0x41D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x41E6 JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x41F2 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x4242 JUMPI PUSH2 0x420A PUSH1 0x2 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4217 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x422B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP4 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x428D JUMPI PUSH2 0x4286 DUP8 DUP6 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4260 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4275 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x5053 JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP4 POP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH2 0x42AD SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP8 DUP8 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x42C1 JUMPI POP DUP9 PUSH2 0x42BE PUSH2 0x1483 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1CD95B1B081D1BC81D185C99D95D0819985A5B1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4333 PUSH1 0xA DUP6 SWAP1 EXP PUSH2 0x2E71 DUP8 PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP10 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x5105 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x4361 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4392 DUP6 PUSH2 0x2E71 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP11 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x43C4 DUP10 DUP10 DUP10 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP13 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP PUSH2 0x43DF PUSH2 0x43D7 DUP11 PUSH2 0x273D JUMP JUMPDEST DUP7 DUP7 DUP11 PUSH2 0x5156 JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4422 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x4464 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x443D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4451 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4428 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x447D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x4494 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4468 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x44DE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x452D JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x44F9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x450D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x44E4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4546 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x455D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4531 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x45A3 JUMPI DUP1 PUSH2 0x45BE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x460A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x461E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3B40 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4704 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4679 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x46FF DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x46DE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x46F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4735 JUMP JUMPDEST PUSH2 0x4735 DUP6 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4714 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4728 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x463B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x474E DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x480C JUMPI PUSH2 0x478B PUSH2 0x4773 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x2E71 DUP12 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 PUSH1 0xA DUP9 SWAP1 EXP PUSH2 0x2E71 DUP13 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x479C JUMPI PUSH1 0x1 PUSH2 0x479E JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x139BDD08115B9BDD59DA0813DD5D1C1D5D08105B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4800 DUP11 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP4 POP DUP9 DUP3 ADD SWAP3 POP PUSH2 0x4813 JUMP JUMPDEST DUP10 SWAP4 POP DUP9 SWAP3 POP JUMPDEST POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x4838 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4889 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x489D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x48B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ PUSH2 0x48CF JUMPI DUP3 PUSH1 0x0 PUSH2 0x48D3 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAD5C4648 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4927 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x493B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND SWAP1 DUP8 AND EQ ISZERO PUSH2 0x4AC5 JUMPI PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x1FAC4F7B PUSH1 0xE2 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP8 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x84 DUP6 ADD SWAP1 DUP2 MSTORE DUP5 MLOAD PUSH1 0xA4 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP8 AND SWAP7 PUSH4 0x7EB13DEC SWAP7 DUP12 SWAP7 DUP12 SWAP7 SWAP5 SWAP6 SWAP1 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xC4 DUP7 ADD SWAP3 SWAP2 DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49F1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x49D9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4A1E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4AB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x4AC0 DUP9 DUP6 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4BCA JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x7EB13DEC SWAP2 DUP7 SWAP2 DUP7 SWAP2 DUP14 SWAP2 SWAP1 POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B62 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B4A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4B8F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4BB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4BC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFFF6CAE9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4C1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4C2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x13 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 DUP2 SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP5 DUP4 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 PUSH2 0x4CB6 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE DUP4 DUP3 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x4CEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4CC3 DUP6 DUP6 PUSH2 0x5542 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 DUP2 KECCAK256 DUP8 SWAP1 SSTORE DUP7 DUP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SSTORE POP POP JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD SWAP8 DUP6 MSTORE DUP5 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP8 DUP7 MSTORE DUP5 MSTORE DUP3 DUP6 KECCAK256 SWAP8 DUP6 MSTORE SWAP7 DUP4 MSTORE SWAP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP3 SWAP1 MSTORE SWAP1 MSTORE DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP7 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 DUP6 MSTORE SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP1 DUP3 LT PUSH2 0x4DBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207175657565 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 PUSH1 0x1 DUP5 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4E28 JUMPI DUP6 DUP4 EQ ISZERO PUSH2 0x4DF9 JUMPI PUSH2 0x4E28 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP4 SWAP1 SSTORE DUP3 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4DE4 JUMP JUMPDEST POP DUP1 DUP6 EQ PUSH2 0x4E6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642064617461 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP5 DUP2 MSTORE PUSH1 0x1 DUP1 DUP7 MSTORE DUP3 DUP3 KECCAK256 SWAP5 DUP3 MSTORE SWAP4 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4EBE DUP5 DUP5 PUSH2 0x5542 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 DUP4 EQ PUSH2 0x4F06 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207072696365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP5 DUP4 MSTORE DUP4 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 DUP2 SWAP1 SSTORE SWAP4 DUP5 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x4F92 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4F73 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4FF4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4FF9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x36E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58D1 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7D DUP4 PUSH2 0x2E71 DUP7 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5064 DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 GT ISZERO PUSH2 0x480C JUMPI PUSH2 0x50A1 PUSH2 0x5089 DUP3 PUSH2 0x2E71 DUP11 PUSH1 0xA DUP11 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP9 PUSH2 0x2E71 DUP12 PUSH1 0xA DUP12 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x50B2 JUMPI PUSH1 0x1 PUSH2 0x50B4 JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x139BDD08115B9BDD59DA08125B9C1D5D08105B5BDD5B9D PUSH1 0x4A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x5148 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5142 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x5131 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x513A JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x511A JUMP JUMPDEST POP PUSH2 0x275D JUMP JUMPDEST DUP2 ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 PUSH1 0x0 DUP1 PUSH2 0x5167 DUP10 DUP8 PUSH2 0x4C4A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5195 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x51C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP3 DUP5 LT DUP1 ISZERO PUSH2 0x51D7 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x542B JUMPI PUSH1 0x0 PUSH2 0x51E8 DUP13 DUP11 PUSH2 0x55E4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x51F5 JUMPI POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x51FD PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD AND SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE DUP5 MLOAD DUP6 SWAP1 DUP9 SWAP1 DUP2 LT PUSH2 0x527F 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 PUSH1 0x0 DUP2 PUSH1 0xA0 ADD MLOAD DUP9 GT PUSH2 0x52B2 JUMPI DUP8 PUSH2 0x52B8 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD JUMPDEST SWAP1 POP DUP1 DUP3 PUSH1 0xA0 ADD MLOAD SUB DUP3 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 DUP5 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x52D7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD SWAP8 DUP2 SWAP1 SUB SWAP8 ISZERO PUSH2 0x5399 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH1 0x10 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA892D68F8384663266856EFCC4ED863CA1D9D7E373285F93BD251549EB82490E DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x53A2 DUP3 PUSH2 0x5643 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD34322DF57B73514D4BA1028D9EDEEB8BFC03224B8035B6C1BFE04FB0F06A55C DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x51C8 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x5507 JUMPI PUSH2 0x543B DUP3 DUP6 PUSH2 0x570F JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5467 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP DUP1 MLOAD DUP7 MLOAD GT ISZERO PUSH2 0x54B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x125B99195E08125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x5505 JUMPI PUSH2 0x54E6 DUP11 PUSH2 0x2E71 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x54CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x54F2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x54B4 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x45BE JUMPI DUP4 PUSH2 0x5532 DUP5 PUSH1 0xA DUP6 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST DUP2 PUSH2 0x5539 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x1 DUP5 EQ ISZERO PUSH2 0x559F JUMPI JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x559A JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x5595 JUMPI PUSH2 0x559A JUMP JUMPDEST PUSH2 0x5566 JUMP JUMPDEST PUSH2 0x55DD JUMP JUMPDEST PUSH1 0x2 DUP5 EQ ISZERO PUSH2 0x55DD JUMPI JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x55DD JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x55D8 JUMPI PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x55A9 JUMP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x5655 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x57E0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 MLOAD DUP3 GT ISZERO PUSH2 0x5758 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x92DCECC2D8D2C840D8CADCCEE8D PUSH1 0x93 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP3 EQ ISZERO PUSH2 0x5768 JUMPI POP DUP2 PUSH2 0x2737 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5792 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x57AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x57C0 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5798 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE SWAP6 DUP3 MSTORE PUSH1 0x1 DUP1 DUP3 MSTORE DUP4 DUP4 KECCAK256 SWAP6 DUP4 MSTORE SWAP5 SWAP1 MSTORE KECCAK256 DUP1 SLOAD SWAP1 SWAP3 ADD SWAP1 SWAP2 SSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID SWAP14 CALLVALUE 0xEE 0xE0 0xC3 LOG3 0xCD 0x21 ORIGIN 0xD4 0x29 DUP8 0x2E PC XOR EXTCODESIZE SIGNEXTEND LOG2 SWAP7 0xCD 0xBA BLOCKHASH SWAP5 DUP4 EXP 0xA5 DUP11 SWAP16 0xB3 COINBASE PUSH9 0xEF5472616E73666572 0x48 PUSH6 0x6C7065723A20 GASLIMIT SLOAD 0x48 0x5F SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0x5C 0xEA 0x5D 0x2C 0xCC 0xE1 PUSH11 0xAB6226DE87935AFEA61FF CREATE DUP15 ISZERO DUP11 JUMP DUP4 LOG1 CALL 0xE0 LOG1 DELEGATECALL 0x49 BLOCKHASH CODESIZE PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "134:20653:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18668:2116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18668:2116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18668:2116:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18668:2116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18668:2116:0;;;;;;;;;;;;;;;;;;;;848:49:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;848:49:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;848:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16521:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16521:210:1;;;:::i;:::-;;;;-1:-1:-1;;;;;16521:210:1;;;;;;;;;;;;;;;;;;;;;;;;15221:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15221:299:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15221:299:1;;:::i;1348:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1348:25:1;;;:::i;:::-;;;;-1:-1:-1;;;;;1348:25:1;;;;;;;;;;;;;;1833:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1833:42:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1833:42:1;;:::i;:::-;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1833:42:1;;;;;;;;;;;;;;;;;;;;;1408:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1408:23:1;;;:::i;:::-;;;;;;;;;;;;;;;;12724:467;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12724:467:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12724:467:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12724:467:1;;;;;;;;;;;;;;;;;1571:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1571:27:1;;;:::i;14866:318::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14866:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14866:318:1;;:::i;5806:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5806:130:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5806:130:1;-1:-1:-1;;;;;5806:130:1;;:::i;11585:1111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11585:1111:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11585:1111:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;1936:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1936:44:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1936:44:1;;-1:-1:-1;;;;;1936:44:1;;;;;;:::i;1089:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1089:21:1;;;:::i;11712:1115:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11712:1115:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11712:1115:0;;;;;;;;;;;;;;;;;:::i;5944:306:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5944:306:1;;;:::i;1149:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1149:21:1;;;:::i;13895:650:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13895:650:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13895:650:0;;:::i;2829:967:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2829:967:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2829:967:1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;980:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:19:1;;;:::i;6258:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6258:132:1;;;:::i;14848:1887:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14848:1887:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14848:1887:0;;-1:-1:-1;;;;;14848:1887:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;932:22:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:22:1;;;:::i;1297:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1297:24:1;;;:::i;15599:914::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15599:914:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15599:914:1;;;;;;;;;;:::i;1245:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1245:23:1;;;:::i;14023:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14023:350:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14023:350:1;;:::i;10845:691::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10845:691:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10845:691:1;;;;;;;;;:::i;16743:1917:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16743:1917:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16743:1917:0;;-1:-1:-1;;;;;16743:1917:0;;;;;;:::i;12889:998::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12889:998:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12889:998:0;;;;;;;;;;;;;;;;;:::i;14407:350:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14407:350:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14407:350:1;;:::i;1464:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1464:24:1;;;:::i;1717:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1717:26:1;;;:::i;18668:2116:0:-;18782:18;18802:25;18829:21;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;18952:4:0;;-1:-1:-1;;;;;18952:4:0;18938:10;:18;18930:45;;;;;-1:-1:-1;;;18930:45:0;;;;;;;;;;;;-1:-1:-1;;;18930:45:0;;;;;;;;;;;;;;;19011:13;;;19022:1;19011:13;;;18986:22;19011:13;;;;;18986:22;19011:13;;;;;105:10:-1;19011:13:0;88:34:-1;-1:-1;;19122:4:0;;19128:9;;19139:10;;18986:38;;-1:-1:-1;19093:57:0;;-1:-1:-1;;;;;19122:4:0;;;;-1:-1:-1;19128:9:0;;;;19139:10;19093:28;:57::i;:::-;19065:11;;-1:-1:-1;;;;;19064:86:0;;;;;;;;;19065:8;;19074:1;;19065:11;;;;;;;;;19078:8;19087:1;19078:11;;;;;;;;;;;;;;;;;19064:86;;;;;19210:13;19226:23;19241:7;19226:14;:23::i;:::-;19210:39;;19260:13;19276:47;19314:8;19276:37;:47::i;:::-;19260:63;;19337:10;19349:11;19364:21;19373:8;19383:1;19364:8;:21::i;:::-;19336:49;;;;19540:918;19547:10;;19540:918;;19642:18;19681:207;19738:8;19765;19792;19801:1;19792:11;;;;;;;;;;;;;;19822:8;19831:1;19822:11;;;;;;;;;;;;;;19852:5;19876:11;;19681:38;:207::i;:::-;19641:247;;;;;;19907:13;19924:1;19907:18;19903:64;;;19946:5;;;19903:64;20067:20;20159:79;20176:2;20180:8;20190:13;20205:5;20212:6;20220:8;20230:7;20159:16;:79::i;:::-;20102:136;;-1:-1:-1;20102:136:0;-1:-1:-1;20102:136:0;;-1:-1:-1;20264:29:0;;-1:-1:-1;20264:8:0;20102:136;20264:29;:12;:29;:::i;:::-;20253:40;;20331:13;20312:15;:32;20308:78;;;20365:5;;;;20308:78;20420:26;20430:8;20440:5;20420:9;:26::i;:::-;20402:44;;-1:-1:-1;20402:44:0;-1:-1:-1;19540:918:0;;-1:-1:-1;;19540:918:0;;20495:16;:14;:16::i;:::-;20528:12;;20524:253;;89:1:4;20574:8:0;:21;:191;;20700:65;20730:8;20740;20749:1;20740:11;;;;;;;;;;;;;;20753:8;20762:1;20753:11;;;;;;;;;;;;;;20700:29;:65::i;:::-;20574:191;;;20615:65;20645:8;20655;20664:1;20655:11;;;;;;;;;;;;;;20668:8;20677:1;20668:11;;;;;;;20615:65;20557:208;;;;20524:253;5571:1:1;;;;;5594;5583:8;:12;;;;18668:2116:0;;;;;;;:::o;848:49:1:-;;;;;;;;;;;;;-1:-1:-1;;;848:49:1;;;;;:::o;16521:210::-;16695:4;;16701:9;;16712:10;;16582:19;;;;16666:57;;-1:-1:-1;;;;;16695:4:1;;;;16701:9;;;;16712:10;16666:28;:57::i;:::-;16636:87;;;;-1:-1:-1;16521:210:1;-1:-1:-1;16521:210:1:o;15221:299::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15348:7;;15322:34;;-1:-1:-1;;;;;15348:7:1;15322:25;:34::i;:::-;-1:-1:-1;;;;;15308:48:1;:10;:48;15300:70;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;;;;15410:3;15389:17;:24;;15381:53;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;;;;15478:14;:34;5594:1;5583:8;:12;15221:299::o;1348:25::-;;;-1:-1:-1;;;;;1348:25:1;;:::o;1833:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;;:::o;1408:23::-;;;;:::o;12724:467::-;12852:13;;;12863:1;12852:13;;;;;;;;;12813:19;;12852:13;;;17:15:-1;;105:10;12852:13:1;88:34:-1;136:17;;-1:-1;12852:13:1;12844:21;;12876:14;;:::i;:::-;-1:-1:-1;12893:21:1;;;;:12;:21;;;;;;;;12876:38;;;;;;;;;-1:-1:-1;;;;;12876:38:1;;;;;;-1:-1:-1;12876:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12876:38:1;;;;;;;;;;;;;;;;;;12925:8;;12876:38;;12925:8;;;;;;;;;;;:26;;;;;12980:1;:4;;;-1:-1:-1;;;;;12973:12:1;12962:5;12968:1;12962:8;;;;;;;;;;;;;:23;;;;;13007:1;:9;;;12996:5;13002:1;12996:8;;;;;;;;;;;;;:20;;;;;13038:1;:7;;;13027:5;13033:1;13027:8;;;;;;;;;;;;;:18;;;;;13067:1;:13;;;13056:5;13062:1;13056:8;;;;;;;;;;;;;:24;;;;;13102:1;:14;;;13091:5;13097:1;13091:8;;;;;;;;;;;;;:25;;;;;13138:1;:11;;;13127:5;13133:1;13127:8;;;;;;;;;;;;;:22;;;;;13171:1;:12;;;13160:5;13166:1;13160:8;;;;;;;;;;;;;:23;;;;;12724:467;;;;:::o;1571:27::-;;;;:::o;14866:318::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14995:7;;14969:34;;-1:-1:-1;;;;;14995:7:1;14969:25;:34::i;:::-;-1:-1:-1;;;;;14955:48:1;:10;:48;14947:83;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;;;;15071:2;15049:18;:24;;15041:53;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;;;;15140:15;:36;5594:1;5583:8;:12;14866:318::o;5806:130::-;-1:-1:-1;;;;;5912:16:1;;;;;;:10;:16;;;;;;;;;5901:27;;;;;;;;;;;;;;;;;5866:22;;5901:27;;;5912:16;5901:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:130;;;:::o;11585:1111::-;11670:20;11692:21;11726:13;11742:23;11752:9;11763:1;11742:9;:23::i;:::-;11726:39;;11776:16;89:1:4;11807:9:1;:22;11803:422;;;11846:149;11852:13;;;;;:34;;;11881:5;11869:8;:17;;11852:34;11846:149;;;11917:30;11927:9;11938:8;11917:9;:30::i;:::-;11906:41;-1:-1:-1;11966:13:1;;11846:149;;;11803:422;;;133:1:4;12025:9:1;:23;12021:204;;;12065:149;12071:13;;;;;:34;;;12100:5;12088:8;:17;;12071:34;12065:149;;;12136:30;12146:9;12157:8;12136:9;:30::i;:::-;12125:41;-1:-1:-1;12185:13:1;;12065:149;;;12241:15;;12237:452;;12293:11;12282:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12282:23:1;;12273:32;;12341:11;12330:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12330:23:1;;12320:33;;12379:23;12389:9;12400:1;12379:9;:23::i;:::-;12368:34;;12417:10;12442:236;12456:11;12448:5;:19;12442:236;;;12504:8;12488:6;12495:5;12488:13;;;;;;;;;;;;;:24;;;;;12548:28;12556:9;12567:8;12548:7;:28::i;:::-;12531:7;12539:5;12531:14;;;;;;;;;;;;;:45;;;;;12606:30;12616:9;12627:8;12606:9;:30::i;:::-;12595:41;-1:-1:-1;12655:7:1;;12442:236;;;12237:452;;11585:1111;;;;;;;:::o;1936:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1089:21::-;;;;:::o;11712:1115:0:-;11845:12;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;11878:9:0;;;;;:35;;;11899:9;;11891:5;:17;;;;;;:22;11878:35;11870:61;;;;;-1:-1:-1;;;11870:61:0;;;;;;;;;;;;-1:-1:-1;;;11870:61:0;;;;;;;;;;;;;;;12008:7;;-1:-1:-1;;;;;12008:7:0;11950:54;12008:7;11950:45;:54::i;:::-;-1:-1:-1;;;;;11950:65:0;;11942:112;;;;;-1:-1:-1;;;11942:112:0;;;;;;;;;;;;-1:-1:-1;;;11942:112:0;;;;;;;;;;;;;;;12130:12;12145:18;:16;:18::i;:::-;12130:33;;12174:16;12203:12;;12193:7;:22;:51;;12243:1;12193:51;;;12228:12;;12218:7;:22;12193:51;12174:70;;12255:19;12277:83;12330:9;;12341:5;12348:11;;12277:52;:83::i;:::-;12255:105;;12394:14;12379:11;:29;;12371:56;;;;;-1:-1:-1;;;12371:56:0;;;;;;;;;;;;-1:-1:-1;;;12371:56:0;;;;;;;;;;;;;;;12455:4;;12440:31;;;-1:-1:-1;;;12440:31:0;;-1:-1:-1;;;;;12440:31:0;;;;;;;;;12455:4;;;;;-1:-1:-1;;12440:31:0;;;;;-1:-1:-1;;12440:31:0;;;;;;;-1:-1:-1;12455:4:0;12440:31;;;5:2:-1;;;;30:1;27;20:12;5:2;12440:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12440:31:0;;;;12482:17;12502:36;12515:11;12528:5;12535:2;12502:12;:36::i;:::-;12482:56;-1:-1:-1;12553:17:0;;12549:216;;12597:69;12612:4;12618:2;12622:11;12635:12;12649:5;89:1:4;12597:14:0;:69::i;:::-;12686:67;;;;;;;;;;;;;;;;;;;89:1:4;12686:67:0;;;;;;-1:-1:-1;;;12587:79:0;;-1:-1:-1;;;;;;12686:67:0;;;;;;;;;;;-1:-1:-1;;;;;;;12686:67:0;;;;;;;;;12549:216;12803:16;:14;:16::i;:::-;-1:-1:-1;;5594:1:1;5583:8;:12;-1:-1:-1;11712:1115:0;;;-1:-1:-1;;;;11712:1115:0:o;5944:306:1:-;6098:4;;6104:9;;6115:10;;6000;;;;;;6069:57;;-1:-1:-1;;;;;6098:4:1;;;;6104:9;;;6115:10;6069:28;:57::i;:::-;6023:103;;-1:-1:-1;6023:103:1;-1:-1:-1;;;;;;6141:16:1;;;6137:106;;6205:11;;-1:-1:-1;;;;;6182:49:1;;;;:35;;:16;;;6199:2;:17;6182:35;:16;:35;:::i;:::-;:49;;;;;;6174:57;;6137:106;5944:306;;;:::o;1149:21::-;;;;:::o;13895:650:0:-;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;13960:14:0;;:::i;:::-;-1:-1:-1;13977:21:0;;;;:12;:21;;;;;;;;;13960:38;;;;;;;;;-1:-1:-1;;;;;13960:38:0;;;;;;-1:-1:-1;13960:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13960:38:0;;;;;;;;;;;;;;;;;;14028:10;14017:21;14009:47;;;;;-1:-1:-1;;;14009:47:0;;;;;;;;;;;;-1:-1:-1;;;14009:47:0;;;;;;;;;;;;;;;14069:20;14087:1;14069:17;:20::i;:::-;14120:13;89:1:4;14136::0;:11;;;:24;:49;;14176:9;;-1:-1:-1;;;;;14176:9:0;14136:49;;;14163:10;;-1:-1:-1;;;;;14163:10:0;14136:49;14120:65;;14196:44;14212:5;14219:1;:4;;;14225:1;:14;;;14196:15;:44::i;:::-;14300:38;;;-1:-1:-1;;;14300:38:0;;14332:4;14300:38;;;;;;-1:-1:-1;;;;;;;14300:23:0;;;-1:-1:-1;;14300:38:0;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;14300:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14300:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14300:38:0;14353:11;;;;14300:38;;-1:-1:-1;89:1:4;14353:24:0;14349:89;;;14379:12;:22;;;14349:89;;;14417:11;:21;;;14349:89;14479:4;;;;;14470:7;;14485:13;;;;;-1:-1:-1;14500:14:0;;;14516:7;;;;;14525:11;;;;14456:81;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14456:81:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5594:1:1;5583:8;:12;-1:-1:-1;;13895:650:0:o;2829:967:1:-;3032:7;;-1:-1:-1;;;;;3032:7:1;3018:10;:21;3010:43;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;;;;3106:1;3092:10;:15;;3084:46;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;;;;3163:1;3149:10;:15;;3141:46;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;;;;3199:14;3215;3249:5;-1:-1:-1;;;;;3234:28:1;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3234:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3234:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3234:30:1;3266;;;-1:-1:-1;;;3266:30:1;;;;-1:-1:-1;;;;;3266:28:1;;;-1:-1:-1;;3266:30:1;;;;;3234;;3266;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;3266:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3266:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3266:30:1;3198:99;;-1:-1:-1;3266:30:1;-1:-1:-1;;;;;;3331:20:1;;;;;;;:45;;;;-1:-1:-1;;;;;;3355:21:1;;;;;;;3331:45;3330:111;;;-1:-1:-1;;;;;;3395:20:1;;;;;;;:45;;;;-1:-1:-1;;;;;;3419:21:1;;;;;;;3395:45;3308:169;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;;;;3490:4;:12;;-1:-1:-1;;;;;3490:12:1;;;-1:-1:-1;;;;;;3490:12:1;;;;;;;3513:9;:22;;;;;;;;;;;;;3546:10;:24;;;;;;;;;;;;;;;3581:9;:22;;;3628:29;;;-1:-1:-1;;;3628:29:1;;;;-1:-1:-1;;;3628:29:1;;;;;;;;;;;;;;3513:22;3628:29;;;5:2:-1;;;;30:1;27;20:12;5:2;3628:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3628:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3628:29:1;3614:43;;:11;:43;-1:-1:-1;;3668:9:1;:22;-1:-1:-1;;3719:2:1;3701:15;:20;-1:-1:-1;;3761:2:1;3744:14;:19;2829:967::o;980:19::-;;;-1:-1:-1;;;;;980:19:1;;:::o;6258:132::-;6360:10;;6353:29;;;-1:-1:-1;;;6353:29:1;;;;6318:12;;-1:-1:-1;;;;;6360:10:1;;-1:-1:-1;;6353:29:1;;;;;;;;;;;;;;6360:10;6353:29;;;5:2:-1;;;;30:1;27;20:12;5:2;6353:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6353:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6353:29:1;6343:39;;;6258:132;-1:-1:-1;6258:132:1:o;14848:1887:0:-;15101:4;;15107:9;;15118:10;;14957:17;;;;;;;;;;15072:57;;-1:-1:-1;;;;;15101:4:0;;;;15107:9;;;;15118:10;15072:28;:57::i;:::-;-1:-1:-1;;;;;15032:97:0;;;;-1:-1:-1;15032:97:0;;-1:-1:-1;15140:13:0;15156:23;15171:7;15156:14;:23::i;:::-;15140:39;;15190:13;15206:47;15244:8;15206:37;:47::i;:::-;15301:17;;-1:-1:-1;15190:63:0;-1:-1:-1;15321:13:0;15301:17;;15400:21;15190:63;15301:17;15400:8;:21::i;:::-;15372:49;;;;15432:1018;15439:10;;15432:1018;;15541:18;15646:130;15685:8;15695:12;15709:11;15722:12;15736:5;15764:11;;15646:38;:130::i;:::-;15574:202;;-1:-1:-1;15574:202:0;-1:-1:-1;15574:202:0;;-1:-1:-1;;;15795:18:0;15791:64;;15834:5;;;15791:64;15947:20;15969:21;15992:17;16013:145;16073:8;16083:13;16098:5;16105:11;;16118:15;;16135:14;;16151:6;16013:41;:145::i;:::-;15946:212;;-1:-1:-1;15946:212:0;-1:-1:-1;15946:212:0;-1:-1:-1;16189:34:0;15946:212;;16189:34;:20;:34;:::i;:::-;16173:50;;;;16253:33;:12;16270:15;16253:33;:16;:33;:::i;:::-;16238:48;;16324:13;16305:15;:32;16301:78;;;16358:5;;;;;;16301:78;16413:25;16422:8;16432:5;16413:8;:25::i;:::-;16395:43;;-1:-1:-1;16395:43:0;-1:-1:-1;15432:1018:0;;-1:-1:-1;;;;15432:1018:0;;16466:16;;16462:266;;89:1:4;16515:8:0;:21;:201;;16646:70;16676:12;16690:11;16703:12;16646:29;:70::i;:::-;16515:201;;;16556:70;16586:12;16600;16614:11;16556:29;:70::i;:::-;16499:217;;;;16462:266;14848:1887;;;;;;;;;;;;:::o;932:22:1:-;;;-1:-1:-1;;;;;932:22:1;;:::o;1297:24::-;;;-1:-1:-1;;;;;1297:24:1;;:::o;15599:914::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15727:7;;15701:34;;-1:-1:-1;;;;;15727:7:1;15701:25;:34::i;:::-;-1:-1:-1;;;;;15687:48:1;:10;:48;15679:70;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;15764:19:1;;15760:179;;15821:21;15861:17;;15857:49;;15880:26;;-1:-1:-1;;;;;15880:11:1;;;:26;;;;;;;;;;;;:11;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15880:26:1;15857:49;15921:7;;;15760:179;15966:38;;;-1:-1:-1;;;15966:38:1;;15998:4;15966:38;;;;;;-1:-1:-1;;;;;;;15966:23:1;;;-1:-1:-1;;15966:38:1;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;15966:38:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15966:38:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15966:38:1;16067:9;;15966:38;;-1:-1:-1;15966:38:1;;-1:-1:-1;;;;;16058:18:1;;;16067:9;;16058:18;16054:377;;;16093:17;16113:28;133:1:4;16113:16:1;:28::i;:::-;16093:48;;16182:12;16172:7;:22;:51;;16222:1;16172:51;;;16207:12;16197:7;:22;16172:51;16156:67;;16054:377;;;;16263:10;;-1:-1:-1;;;;;16254:19:1;;;16263:10;;16254:19;16250:181;;;16290:17;16310:27;89:1:4;16310:16:1;:27::i;:::-;16290:47;;16378:12;16368:7;:22;:51;;16418:1;16368:51;;;16403:12;16393:7;:22;16368:51;16352:67;;16250:181;;16447:17;;16443:62;;16466:39;16480:5;16487:2;16491:13;16466;:39::i;:::-;5571:1;;;-1:-1:-1;;5594:1:1;5583:8;:12;15599:914::o;1245:23::-;;;;:::o;14023:350::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14136:7;;14110:34;;-1:-1:-1;;;;;14136:7:1;14110:25;:34::i;:::-;-1:-1:-1;;;;;14096:48:1;:10;:48;14092:180;;14168:22;89:1:4;14168:11:1;:22::i;:::-;:27;:59;;;;;14199:23;133:1:4;14199:11:1;:23::i;:::-;:28;14168:59;14160:100;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;;;;14306:1;14290:12;:17;;14282:48;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;;;;14341:9;:24;5594:1;5583:8;:12;14023:350::o;10845:691::-;10954:20;10976:21;11010:16;11029:22;11041:9;11029:11;:22::i;:::-;11010:41;;11091:7;11077:21;;:11;:21;:45;;11111:11;11077:45;;;11101:7;11077:45;;;11062:60;;11153:11;11142:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11142:23:1;;11133:32;;11197:11;11186:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11186:23:1;;11176:33;;11220:13;11236:23;11246:9;11257:1;11236:9;:23::i;:::-;11220:39;-1:-1:-1;11270:12:1;11297:232;11303:13;;;;;:36;;;11328:11;11320:5;:19;;;11303:36;11297:232;;;11371:8;11355:6;11362:5;11355:13;;;;;;;;;;;;;;;:24;;;;;11411:28;11419:9;11430:8;11411:7;:28::i;:::-;11394:7;11402:5;11394:14;;;;;;;;;;;;;;;:45;;;;;11465:30;11475:9;11486:8;11465:9;:30::i;:::-;11454:41;-1:-1:-1;11510:7:1;;11297:232;;16743:1917:0;16996:4;;17002:9;;17013:10;;16853:16;;;;;;;;;;16967:57;;-1:-1:-1;;;;;16996:4:0;;;;17002:9;;;;17013:10;16967:28;:57::i;:::-;-1:-1:-1;;;;;16927:97:0;;;;-1:-1:-1;16927:97:0;;-1:-1:-1;17035:13:0;17051:24;17066:8;17051:14;:24::i;:::-;17035:40;;17123:13;17139:47;17177:8;17139:37;:47::i;:::-;17197:18;;-1:-1:-1;17123:63:0;-1:-1:-1;17218:14:0;17197:18;;17297:21;17306:8;17197:18;17297:8;:21::i;:::-;17269:49;;;;17329:1046;17336:10;;17329:1046;;17438:18;17539:140;17591:8;17601:13;17616:11;17629:12;17660:5;17667:11;;17539:51;:140::i;:::-;17471:208;;-1:-1:-1;17471:208:0;-1:-1:-1;17471:208:0;;-1:-1:-1;;;17698:18:0;17694:64;;17737:5;;;17694:64;17851:20;17873:21;17896:17;17917:157;17972:8;17999:13;18014:5;18021:11;;18034:15;;18051:14;;18067:6;17917:40;:157::i;:::-;17850:224;;-1:-1:-1;17850:224:0;-1:-1:-1;17850:224:0;-1:-1:-1;18104:22:0;17850:224;18124:1;18104:22;:19;:22;:::i;:::-;18089:37;;;;18157:53;18175:34;:16;18196:12;18175:34;:20;:34;:::i;:::-;18157:13;;:53;:17;:53;:::i;:::-;18141:69;;18249:13;18229:16;:33;18225:79;;;18283:5;;;;;;18225:79;18338:25;18347:8;18357:5;18338:8;:25::i;:::-;18320:43;;-1:-1:-1;18320:43:0;-1:-1:-1;17329:1046:0;;-1:-1:-1;;;;17329:1046:0;;18391:17;;18387:266;;89:1:4;18440:8:0;:21;:201;;18571:70;18600:13;18615:11;18628:12;18571:28;:70::i;18440:201::-;18481:70;18510:13;18525:12;18539:11;18481:28;:70::i;12889:998::-;13023:12;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;13056:9:0;;;;;:37;;;13078:9;;13070:5;:17;;;;;;13069:24;13056:37;13048:63;;;;;-1:-1:-1;;;13048:63:0;;;;;;;;;;;;-1:-1:-1;;;13048:63:0;;;;;;;;;;;;;;;13188:7;;-1:-1:-1;;;;;13188:7:0;13130:54;13188:7;13130:45;:54::i;:::-;-1:-1:-1;;;;;13130:65:0;;13122:112;;;;;-1:-1:-1;;;13122:112:0;;;;;;;;;;;;-1:-1:-1;;;13122:112:0;;;;;;;;;;;;;;;13310:12;13325:17;:15;:17::i;:::-;13310:32;;13353:16;13382:11;;13372:7;:21;:49;;13420:1;13372:49;;;13406:11;;13396:7;:21;13372:49;13353:68;;13455:9;;13440:11;:24;;13432:51;;;;;-1:-1:-1;;;13432:51:0;;;;;;;;;;;;-1:-1:-1;;;13432:51:0;;;;;;;;;;;;;;;13511:4;;13496:31;;;-1:-1:-1;;;13496:31:0;;-1:-1:-1;;;;;13496:31:0;;;;;;;;;13511:4;;;;;-1:-1:-1;;13496:31:0;;;;;-1:-1:-1;;13496:31:0;;;;;;;-1:-1:-1;13511:4:0;13496:31;;;5:2:-1;;;;30:1;27;20:12;5:2;13496:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13496:31:0;;;;13538:17;13558:38;13573:11;13586:5;13593:2;13558:14;:38::i;:::-;13538:58;-1:-1:-1;13611:17:0;;13607:218;;13655:70;13670:4;13676:2;13680:11;13693:12;13707:5;133:1:4;13655:14:0;:70::i;:::-;13745:68;;;;;;;;;;;;;;;;;;;133:1:4;13745:68:0;;;;;;-1:-1:-1;;;13645:80:0;;-1:-1:-1;;;;;;13745:68:0;;;;;;;;;;;-1:-1:-1;;;;;;;13745:68:0;;;;;;;;;13607:218;13863:16;:14;:16::i;:::-;-1:-1:-1;;5594:1:1;5583:8;:12;-1:-1:-1;12889:998:0;;-1:-1:-1;;;12889:998:0:o;14407:350:1:-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14520:7;;14494:34;;-1:-1:-1;;;;;14520:7:1;14494:25;:34::i;:::-;-1:-1:-1;;;;;14480:48:1;:10;:48;14476:180;;14552:22;89:1:4;14552:11:1;:22::i;:::-;:27;:59;;;;;14583:23;133:1:4;14583:11:1;:23::i;:::-;:28;14552:59;14544:100;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;;;;14690:1;14674:12;:17;;14666:48;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;;;;14725:9;:24;5594:1;5583:8;:12;14407:350::o;1464:24::-;;;;:::o;1717:26::-;;;;:::o;2899:496:13:-;2994:16;;-1:-1:-1;;;;;3049:16:13;;;;;;;;3041:48;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;;;;3100:14;-1:-1:-1;;;;;3117:15:13;;;;;;;:33;;3144:6;3117:33;;;3135:6;3117:33;3100:50;-1:-1:-1;;;;;;3169:20:13;;3161:45;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;;;;3218:16;3236;3272:4;-1:-1:-1;;;;;3257:32:13;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3257:34:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3257:34:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3257:34:13;;;;;;;;;-1:-1:-1;3257:34:13;-1:-1:-1;;;;;;3325:16:13;;;;;;;:62;;3368:8;3378;3325:62;;;3345:8;3355;3325:62;3302:85;;;;-1:-1:-1;2899:496:13;-1:-1:-1;;;;;;;2899:496:13:o;6398:172:1:-;6516:10;;6477:14;;-1:-1:-1;;;;;6516:21:1;;;:10;;:21;:46;;133:1:4;6516:46:1;;;89:1:4;6516:46:1;6504:58;6398:172;-1:-1:-1;;6398:172:1:o;409:268:13:-;478:13;520:9;355:1;507:22;503:167;;;-1:-1:-1;399:1:13;503:167;;;612:9;399:1;598:23;594:76;;;-1:-1:-1;355:1:13;594:76;409:268;;;:::o;13503:220:1:-;13604:9;13615:11;13646:25;13656:9;13667:3;13646:9;:25::i;:::-;13639:32;;13691:24;13699:9;13710:4;13691:7;:24::i;:::-;13682:33;;13503:220;;;;;:::o;6842:1738:13:-;7060:17;7079:15;7096:16;7114:19;7135:20;355:1;7172:9;:22;7168:1405;;;7211:13;7227:64;7249:11;7262:12;7276:5;7283:7;7227:21;:64::i;:::-;7211:80;-1:-1:-1;7306:13:13;7322:22;:12;7339:4;7322:22;:16;:22;:::i;:::-;7306:38;;7384:8;7373;:19;:57;;7429:1;7373:57;;;7395:31;7396:19;;;7421:4;7395:31;:25;:31;:::i;:::-;7359:71;;7473:8;7459:11;:22;:47;;7495:11;7459:47;;;7484:8;7459:47;7445:61;-1:-1:-1;7534:16:13;;:75;;7557:52;7570:11;7583:12;7597:11;7557:12;:52::i;:::-;7534:75;;;7553:1;7534:75;7731:22;;;;-1:-1:-1;7521:88:13;-1:-1:-1;;;7755:24:13;;;;-1:-1:-1;;7781:26:13;;;7168:1405;;;399:1;7839:9;:23;7835:738;;;7879:13;7895:66;7919:11;7932:12;7946:5;7953:7;7895:23;:66::i;:::-;7879:82;-1:-1:-1;7976:13:13;7992:21;:11;8008:4;7992:21;:15;:21;:::i;:::-;7976:37;;8052:8;8041;:19;:57;;8097:1;8041:57;;;8063:31;8064:19;;;8089:4;8063:31;:25;:31;:::i;:::-;8028:70;;8139:8;8126:10;:21;:45;;8161:10;8126:45;;;8150:8;8126:45;8113:58;-1:-1:-1;8200:15:13;;:73;;8222:51;8235:10;8247:11;8260:12;8222;:51::i;:::-;8200:73;;;8218:1;8200:73;8356:21;;;;-1:-1:-1;8186:87:13;-1:-1:-1;;;8379:24:13;;;;-1:-1:-1;;8405:26:13;;;7835:738;;;-1:-1:-1;8525:8:13;;-1:-1:-1;8535:11:13;;-1:-1:-1;8548:12:13;7835:738;6842:1738;;;;;;;;;;;;:::o;2849:985:0:-;3114:13;3129:28;3159:25;3186:21;3220;3252:17;3357:63;3375:9;3386:13;3401:5;3408:11;3357:17;:63::i;:::-;3280:140;;-1:-1:-1;3280:140:0;-1:-1:-1;3280:140:0;;-1:-1:-1;3280:140:0;-1:-1:-1;3280:140:0;-1:-1:-1;3441:36:0;3280:140;3468:8;3441:17;:36::i;:::-;3431:46;;3499:41;3520:8;3530:9;3499:20;:41::i;:::-;3488:52;-1:-1:-1;3577:34:0;:16;3598:12;3577:34;:20;:34;:::i;:::-;3551:60;;3697:16;89:1:4;3716:9:0;:22;:47;;3753:10;;-1:-1:-1;;;;;3753:10:0;3716:47;;;3741:9;;-1:-1:-1;;;;;3741:9:0;3716:47;3697:66;;3774:52;3788:8;3798:2;3802:23;3774:13;:52::i;:::-;2849:985;;;;;;;;;;;;;;;:::o;296:129:14:-;380:5;;;375:16;;;;367:50;;;;;-1:-1:-1;;;367:50:14;;;;;;;;;;;;-1:-1:-1;;;367:50:14;;;;;;;;;;;;;;13731:222:1;13833:9;13844:11;13875:26;13886:9;13897:3;13875:10;:26::i;4092:179::-;4159:9;;4152:42;;;-1:-1:-1;;;4152:42:1;;4188:4;4152:42;;;;;;-1:-1:-1;;;;;4159:9:1;;;;-1:-1:-1;;4152:42:1;;;;;;;;;;;;;;;4159:9;4152:42;;;5:2:-1;;;;30:1;27;20:12;5:2;4152:42:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4152:42:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4152:42:1;4138:11;:56;4227:10;;4220:43;;;-1:-1:-1;;;4220:43:1;;4257:4;4220:43;;;;;;-1:-1:-1;;;;;4227:10:1;;;;-1:-1:-1;;4220:43:1;;;;;4152:42;;4220:43;;;;;;;;4227:10;4220:43;;;5:2:-1;;;;30:1;27;20:12;5:2;4220:43:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4220:43:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4220:43:1;4205:12;:58;4092:179::o;1803:481:13:-;1896:14;1942:1;1931:8;:12;1923:50;;;;;-1:-1:-1;;;1923:50:13;;;;;;;;;;;;-1:-1:-1;;;1923:50:13;;;;;;;;;;;;;;;2004:1;1992:9;:13;:31;;;;;2022:1;2009:10;:14;1992:31;1984:66;;;;;-1:-1:-1;;;1984:66:13;;;;;;;;;;;;-1:-1:-1;;;1984:66:13;;;;;;;;;;;;;;;2061:20;2084:17;:8;2097:3;2084:17;:12;:17;:::i;:::-;2061:40;-1:-1:-1;2112:14:13;2129:31;2061:40;2149:10;2129:31;:19;:31;:::i;:::-;2112:48;-1:-1:-1;2171:16:13;2190:40;2214:15;2190:19;:9;2204:4;2190:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;2171:59;;2265:11;2253:9;:23;;;;;;;1803:481;-1:-1:-1;;;;;;;1803:481:13:o;685:166::-;743:13;812:7;-1:-1:-1;;;;;794:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;794:40:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;794:40:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;794:40:13;776:67;;;-1:-1:-1;;;776:67:13;;;;-1:-1:-1;;;;;776:65:13;;;;;;:67;;;;;794:40;;776:67;;;;;;;;:65;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;776:67:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;776:67:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;776:67:13;;685:166;-1:-1:-1;;685:166:13:o;2779:231:4:-;2935:9;2964:33;;;:22;:33;;;;;;;;:38;;;;;;;;;;2779:231::o;10051:385:1:-;10153:12;10205:31;;;:20;:31;;;;;;;;:38;;;;;;;;;10245:30;;;:19;:30;;;;;:37;;;;;;;;;10205:38;10294:135;10315:4;10313:1;:6;10294:135;;;10351:53;10364:29;;;;;;;;;;;:36;;;;;;;;:39;;;;;;;;;10351:53;;:12;:53;;;;;:66;;;10340:77;;;;;10321:3;;10294:135;;;;10051:385;;;;;;:::o;859:210:13:-;937:18;1016:7;-1:-1:-1;;;;;998:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;998:40:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;998:40:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;998:40:13;980:81;;;-1:-1:-1;;;980:81:13;;;;-1:-1:-1;;;;;980:79:13;;;;-1:-1:-1;;980:81:13;;;;;998:40;;980:81;;;;;;;;:79;:81;;;5:2:-1;;;;30:1;27;20:12;3947:137:1;4040:10;;4033:43;;;-1:-1:-1;;;4033:43:1;;4070:4;4033:43;;;;;;-1:-1:-1;;;;;;;4040:10:1;;-1:-1:-1;;4033:43:1;;;;;;;;;;;;;;4040:10;4033:43;;;5:2:-1;;;;30:1;27;20:12;5:2;4033:43:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4033:43:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4033:43:1;;3947:137;-1:-1:-1;3947:137:1:o;1153:221:13:-;1283:14;1322:44;1348:2;:17;;;1322:21;:10;1337:5;1322:21;:14;:21;:::i;:::-;:25;:44;:25;:44;:::i;:::-;1310:56;1153:221;-1:-1:-1;;;;1153:221:13:o;4950:3221:0:-;5129:13;;;5140:1;5129:13;;;;;;;;;5076:15;;5104:22;;5129:13;;;;17:15:-1;;105:10;5129:13:0;88:34:-1;-1:-1;;5273:4:0;;5279:9;;5290:10;;5104:38;;-1:-1:-1;5244:57:0;;-1:-1:-1;;;;;5273:4:0;;;;-1:-1:-1;5279:9:0;;;;5290:10;5244:28;:57::i;:::-;5216:11;;-1:-1:-1;;;;;5215:86:0;;;;;;;;;5216:8;;5225:1;;5216:11;;;;;;;;;5229:8;5238:1;5229:11;;;;;;;;;;;;;5215:86;;;;;;;;;;5342:8;5351:1;5342:11;;;;;;;;;;;;;;5355:8;5364:1;5355:11;;;;;;;;;;;;;;5313:8;5322:1;5313:11;;;;;;;;;;;;;5326:8;5335:1;5326:11;;;;;;;;;;;;;5312:55;;;;;;;;;;5378:20;5415:1;5401:8;5410:1;5401:11;;;;;;;;;;;;;;:15;:34;;;;;5434:1;5420:8;5429:1;5420:11;;;;;;;;;;;;;;:15;5401:34;5378:57;;5446:18;5475:19;5505:23;5552:11;5539:24;;5576:10;5589:24;133:1:4;5611::0;5589:9;:24::i;:::-;5576:37;;5624:1452;5631:10;;;;;:34;;;5654:11;5645:5;:20;;5631:34;5624:1452;;;5703:10;5784:455;;;;5920:132;89:1:4;5970:10:0;6007:8;6016:1;6007:11;;;;;;;;;;;;;;6020:8;6029:1;6020:11;;;;;;;;;;;;;;6033:5;6040:11;;5920:38;:132::i;:::-;5871:8;5880:1;5871:11;;;;;;;;;;;;;5884:8;5893:1;5884:11;;;;;;;;;;;;;;;;;5824:228;;;;;;;-1:-1:-1;5824:228:0;-1:-1:-1;5824:228:0;-1:-1:-1;6075:18:0;6071:153;;6131:1;6118:14;;6199:5;;;6071:153;6255:11;6269:26;133:1:4;6289:5:0;6269:7;:26::i;:::-;6255:40;;6359:20;6394:21;6430:17;6462:25;6502:21;6527:58;89:1:4;6556:13:0;6571:5;6578:6;6527:17;:58::i;:::-;6358:227;;-1:-1:-1;6358:227:0;;-1:-1:-1;6358:227:0;-1:-1:-1;6358:227:0;-1:-1:-1;6358:227:0;-1:-1:-1;6622:34:0;6358:227;;6622:34;:20;:34;:::i;:::-;6686:10;;6600:56;;;6671:45;;-1:-1:-1;;;;;6686:10:0;6698:8;6708:7;6671:14;:45::i;:::-;6756:13;6737:15;:32;6733:278;;;6840:1;6827:14;;6905:5;;;;;;;;;6733:278;6964:31;:10;6979:15;6964:31;:14;:31;:::i;:::-;6951:44;;7035:29;133:1:4;7058:5:0;7035:10;:29::i;:::-;7027:37;;5624:1452;;;;;;;;;;7153:22;;7149:105;;7208:9;;7192:50;;-1:-1:-1;;;;;7208:9:0;7219:2;7223:18;7192:15;:50::i;:::-;7359:15;:33;;;;;7391:1;7378:10;:14;7359:33;:57;;;;;7405:11;7396:5;:20;;7359:57;7355:313;;;7522:134;89:1:4;7572:10:0;7605:8;7614:1;7605:11;;;;;;;;;;;;;;7618:8;7627:1;7618:11;;;;;;;;;;;;;;7631;7644;;7522:38;:134::i;:::-;7477:8;7486:1;7477:11;;;;;;;;;;;;;7490:8;7499:1;7490:11;;;;;;;;;;;;;;;;;7433:223;;;;;;;-1:-1:-1;7433:223:0;-1:-1:-1;7433:223:0;-1:-1:-1;7355:313:0;7684:18;;7680:484;;7723:14;;7719:256;;7811:148;7855:10;7867:14;7883:8;7892:1;7883:11;;;;;;;;;;;;;;7896:8;7905:1;7896:11;;;;;;;;;;;;;;7934;7947;;7811:43;:148::i;:::-;-1:-1:-1;7758:201:0;;-1:-1:-1;7758:201:0;-1:-1:-1;7719:256:0;8009:10;;8021:9;;7991:71;;8005:2;;-1:-1:-1;;;;;8009:10:0;;;;8021:9;8032:14;8048:13;7991;:71::i;:::-;8085:15;;;:44;;;8118:11;8104:10;:8;:10::i;:::-;:25;;8085:44;8077:75;;;;;-1:-1:-1;;;8077:75:0;;;;;;;;;;;;-1:-1:-1;;;8077:75:0;;;;;;;;;;;;;;;4950:3221;;;;;;;;;;;:::o;6603:893:1:-;-1:-1:-1;;;;;6854:16:1;;6801:12;6854:16;;;:10;:16;;;;;;;;6826:44;;;;;;;;;;;;;;;;;:25;;:44;;6854:16;6826:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:4;6889:11;:18;:25;6881:62;;;;;-1:-1:-1;;;6881:62:1;;;;;;;;;;;;-1:-1:-1;;;6881:62:1;;;;;;;;;;;;;;;6972:18;;7003;;:::i;:::-;7024:197;;;;;;;;-1:-1:-1;;;;;7024:197:1;;;;;;;;;;;;;;7081:18;:16;:18::i;:::-;7024:197;;;;7114:6;7024:197;;;;7135:12;7024:197;;;;7162:13;7024:197;;;;7190:5;7024:197;;;;7210:10;7024:197;;;7003:218;;7232:10;:16;7243:4;-1:-1:-1;;;;;7232:16:1;-1:-1:-1;;;;;7232:16:1;;;;;;;;;;;;7254:5;:13;;;7232:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;7232:36:1;;;;;;;;;;;;;;;;;;;;;;7311:5;7281:12;:27;7294:5;:13;;;7281:27;;;;;;;;;;;:35;;;;;;;;;;;;;-1:-1:-1;;;;;7281:35:1;;;;;-1:-1:-1;;;;;7281:35:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7281:35:1;;;;;-1:-1:-1;;;;;7281:35:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7331:21;7338:5;7345:6;7331;:21::i;:::-;7327:82;;7374:23;7383:5;7390:6;7374:8;:23::i;:::-;7421:34;7426:5;7433:6;7441:5;:13;;;7421:4;:34::i;:::-;7475:13;;;;6603:893;-1:-1:-1;;;;;;;;;6603:893:1:o;433:142:14:-;485:6;512;;;:30;;-1:-1:-1;;527:5:14;;;541:1;536;527:5;536:1;522:15;;;;;:20;512:30;504:63;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;;;8548:958:1;8645:48;8649:5;:15;;;8666:5;:11;;;8679:5;:13;;;8645:3;:48::i;:::-;8754:13;;;;;8741:27;;;;:12;:27;;;;;;;8734:34;;-1:-1:-1;;;;;;8734:34:1;;;;;-1:-1:-1;8734:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8843:11;;-1:-1:-1;;;;;8832:23:1;;;:10;:23;;;:30;8897:16;;;;8881:32;;8873:63;;;;;-1:-1:-1;;;8873:63:1;;;;;;;;;;;;-1:-1:-1;;;8873:63:1;;;;;;;;;;;;;;;9051:11;;-1:-1:-1;;;;;9040:23:1;9019:18;9040:23;;;:10;:23;;;;;:42;;-1:-1:-1;;9064:17:1;;;9040:42;;;;;;;;;;;;;;;;;;;9104:11;;-1:-1:-1;;;;;9093:23:1;;;:10;:23;;;;;;;9117:16;;;;9093:41;;9040:42;;-1:-1:-1;9040:42:1;;9093:41;;;;;;;;;;;;;;;;;;:57;;;;9240:16;;;;9199:27;;;:12;:27;;;;;;:38;;:57;;;;9333:11;;-1:-1:-1;;;;;9322:23:1;;;:10;:23;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;9392:36;9399:5;:15;;;9416:5;:11;;;9392:6;:36::i;:::-;9388:111;;9449:38;9458:5;:15;;;9475:5;:11;;;9449:8;:38::i;:::-;8548:958;;;:::o;5083:355::-;5201:7;;5183:33;;;-1:-1:-1;;;5183:33:1;;;;5168:12;;-1:-1:-1;;;;;5201:7:1;;5183:31;;:33;;;;;;;;;;;;;;5201:7;5183:33;;;5:2:-1;;;;30:1;27;20:12;5:2;5183:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5183:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5183:33:1;;-1:-1:-1;;;;;;5231:13:1;;;;;;;5227:204;;;5261:28;;;-1:-1:-1;;;5261:28:1;;;;;;;;;;-1:-1:-1;;;;;5261:20:1;;;;;:28;;;;;-1:-1:-1;;5261:28:1;;;;;;;-1:-1:-1;5261:20:1;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;5261:28:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5261:28:1;;;;5304:42;5335:2;5339:6;5304:30;:42::i;:::-;5227:204;;;5387:32;5401:5;5408:2;5412:6;5387:13;:32::i;:::-;5083:355;;;;:::o;10815:2374:13:-;11063:17;11082:21;11105:17;11135:8;355:1;11158:8;:21;11154:1895;;;11307:14;11324:66;11360:13;11375:5;11382:7;11324:35;:66::i;:::-;11307:83;-1:-1:-1;11433:38:13;:11;11449:5;:21;;;11433:38;:15;:38;:::i;:::-;11409:20;:9;11423:5;11409:20;:13;:20;:::i;:::-;:62;11405:662;;11545:13;;-1:-1:-1;11583:41:13;11618:5;11583:30;:9;11597:15;11583:30;:13;:30;:::i;:41::-;11577:47;;11674:3;11662:9;:15;11643:34;;11405:662;;;11743:49;11786:5;11743:38;:11;11759:21;;;11743:38;:15;:38;:::i;:49::-;11731:61;;11884:62;11920:9;11931:5;11938:7;11884:35;:62::i;:::-;11869:77;-1:-1:-1;11984:11:13;;-1:-1:-1;12020:31:13;11984:11;12041:9;12020:31;:20;:31;:::i;:::-;12014:37;;11405:662;11154:1895;;;;399:1;12097:8;:22;12093:956;;;12281:14;12298:66;12334:13;12349:5;12356:7;12298:35;:66::i;:::-;12281:83;-1:-1:-1;12407:38:13;:11;12423:5;:21;;;12407:38;:15;:38;:::i;:::-;12383:20;:9;12397:5;12383:20;:13;:20;:::i;:::-;:62;12379:659;;12519:13;;-1:-1:-1;12557:41:13;12592:5;12557:30;:9;12571:15;12557:30;:13;:30;:::i;:41::-;12551:47;;12648:3;12636:9;:15;12617:34;;12379:659;;;12717:49;12760:5;12717:38;:11;12733:21;;;12717:38;:15;:38;:::i;:49::-;12705:61;;12858:62;12894:9;12905:5;12912:7;12858:35;:62::i;:::-;12843:77;;12958:11;12939:30;;13013:9;12994:16;:28;12988:34;;12379:659;12093:956;;13129:52;13177:3;13130:41;13147:23;:3;13155:14;13147:23;:7;:23;:::i;:::-;13130:12;:3;13138;13130:12;:7;:12;:::i;:::-;:16;:41;:16;:41;:::i;13129:52::-;13114:67;;10815:2374;;;;;;;;;;;;:::o;10465:307:1:-;10545:11;10574:13;10590:23;10600:9;10611:1;10590:9;:23::i;:::-;10574:39;;10624:141;10630:13;;10624:141;;10669:28;10677:9;10688:8;10669:7;:28::i;:::-;10659:38;;;;10723:30;10733:9;10744:8;10723:9;:30::i;:::-;10712:41;;10624:141;;;10465:307;;;;:::o;4279:291::-;789:34;;;;;;;;;;;-1:-1:-1;;;789:34:1;;;;;4413:52;;-1:-1:-1;;;;;4413:52:1;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4413:52:1;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;4402:64:1;;;;-1:-1:-1;;4381:17:1;;4402:10;;;4413:52;4402:64;;;25:18:-1;4402:64:1;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4402:64:1;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;4366:100:1;;;;4485:7;:57;;;;-1:-1:-1;4497:11:1;;:16;;:44;;;4528:4;4517:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4517:24:1;4497:44;4477:85;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;;;;4279:291;;;;;:::o;556:183:4:-;641:21;694:37;;;:26;:37;;;;;;;556:183::o;8740:1933:13:-;8972:18;8992:15;9009:16;9027:19;9048:20;355:1;9085:9;:22;9081:1585;;;9124:13;9140:64;9162:11;9175:12;9189:5;9196:7;9140:21;:64::i;:::-;9124:80;-1:-1:-1;9219:13:13;9235:22;:12;9252:4;9235:22;:16;:22;:::i;:::-;9219:38;;9297:8;9286;:19;:57;;9342:1;9286:57;;;9308:31;9309:19;;;9334:4;9308:31;:25;:31;:::i;:::-;9272:71;-1:-1:-1;9371:16:13;;:75;;9394:52;9407:11;9420:12;9434:11;9394:12;:52::i;:::-;9371:75;;;9390:1;9371:75;9358:88;;9478:9;9465:10;:22;9461:168;;;9521:9;9508:22;;9563:50;9575:10;9587:12;9601:11;9563;:50::i;:::-;9549:64;;9461:168;-1:-1:-1;;;9712:22:13;;;;-1:-1:-1;;9736:24:13;;;9762:26;;;9081:1585;;;399:1;9820:9;:23;9816:850;;;9860:13;9876:66;9900:11;9913:12;9927:5;9934:7;9876:23;:66::i;:::-;9860:82;-1:-1:-1;9957:13:13;9973:21;:11;9989:4;9973:21;:15;:21;:::i;:::-;9957:37;;10033:8;10022;:19;:57;;10078:1;10022:57;;;10044:31;10045:19;;;10070:4;10044:31;:25;:31;:::i;:::-;10009:70;-1:-1:-1;10108:15:13;;:73;;10130:51;10143:10;10155:11;10168:12;10130;:51::i;:::-;10108:73;;;10126:1;10108:73;10094:87;;10214:9;10200:11;:23;10196:170;;;10258:9;10244:23;;10299:51;10311:11;10324;10337:12;10299:11;:51::i;:::-;10286:64;;10196:170;-1:-1:-1;;;10445:23:13;;;;-1:-1:-1;;10470:24:13;;;10496:26;;;9816:850;;13257:2563;13506:13;;;;13705:43;13742:5;13705:32;:11;13721:15;13705:32;:15;:32;:::i;:43::-;13675:73;-1:-1:-1;13759:26:13;13788:51;13835:3;13788:42;13675:73;13815:14;13788:42;:26;:42;:::i;:51::-;13759:80;-1:-1:-1;13850:30:13;13883:66;13899:49;:22;13759:80;13899:49;:26;:49;:::i;13883:66::-;13850:99;;13960:24;14028:15;13999:25;:44;13995:1417;;14106:11;;-1:-1:-1;14147:47:13;14106:11;14168:25;14147:47;:20;:47;:::i;:::-;14132:62;-1:-1:-1;14231:52:13;:25;14261:21;14231:52;:29;:52;:::i;:::-;14209:74;;13995:1417;;;14353:15;14325:43;;14653:86;14724:14;14706:15;:32;14696:7;:42;14653:38;14683:7;14653:25;:29;;:38;;;;:::i;:86::-;14634:105;-1:-1:-1;15194:129:13;15290:32;;;15280:7;:42;15194:63;15233:5;:23;;;15194:34;:25;15224:3;15194:34;:29;:34;:::i;:::-;:38;:63;:38;:63;:::i;:129::-;15172:151;-1:-1:-1;15353:47:13;:16;15374:25;15353:47;:20;:47;:::i;:::-;15338:62;;13995:1417;355:1;15428:8;:21;15424:389;;;15477:72;15513:19;15534:5;15541:7;15477:35;:72::i;:::-;15466:83;;15424:389;;;399:1;15679:8;:22;15675:138;;;15729:72;15765:19;15786:5;15793:7;15729:35;:72::i;:::-;15718:83;;15675:138;13257:2563;;;;;;;;;;;;;;;:::o;160:128:14:-;244:5;;;239:16;;;;231:49;;;;;-1:-1:-1;;;231:49:14;;;;;;;;;;;;-1:-1:-1;;;231:49:14;;;;;;;;;;;;;;2405:436:13;2498:13;2544:1;2532:9;:13;2524:52;;;;;-1:-1:-1;;;2524:52:13;;;;;;;;;;;;-1:-1:-1;;;2524:52:13;;;;;;;;;;;;;;;2607:1;2595:9;:13;:31;;;;;2625:1;2612:10;:14;2595:31;2587:66;;;;;-1:-1:-1;;;2587:66:13;;;;;;;;;;;;-1:-1:-1;;;2587:66:13;;;;;;;;;;;;;;;2664:14;2681:34;2710:4;2681:24;:9;2695;2681:24;:13;:24;:::i;:34::-;2664:51;-1:-1:-1;2726:16:13;2745:34;2775:3;2745:25;:10;2760:9;2745:25;:14;:25;:::i;:34::-;2726:53;;2801:32;2831:1;2814:11;2802:9;:23;;;;;;;2801:32;:29;:32;:::i;:::-;2790:43;2405:436;-1:-1:-1;;;;;;2405:436:13:o;3804:135:1:-;3896:9;;3889:42;;;-1:-1:-1;;;3889:42:1;;3925:4;3889:42;;;;;;-1:-1:-1;;;;;;;3896:9:1;;-1:-1:-1;;3889:42:1;;;;;;;;;;;;;;3896:9;3889:42;;;5:2:-1;;;;30:1;27;20:12;8424:3225:0;8605:13;;;8616:1;8605:13;;;;;;;;;8552:15;;8580:22;;8605:13;;;;17:15:-1;;105:10;8605:13:0;88:34:-1;-1:-1;;8749:4:0;;8755:9;;8766:10;;8580:38;;-1:-1:-1;8720:57:0;;-1:-1:-1;;;;;8749:4:0;;;;-1:-1:-1;8755:9:0;;;;8766:10;8720:28;:57::i;:::-;8692:11;;-1:-1:-1;;;;;8691:86:0;;;;;;;;;8692:8;;8701:1;;8692:11;;;;;;;;;8705:8;8714:1;8705:11;;;;;;;;;;;;;8691:86;;;;;;;;;;8818:8;8827:1;8818:11;;;;;;;;;;;;;;8831:8;8840:1;8831:11;;;;;;;;;;;;;;8789:8;8798:1;8789:11;;;;;;;;;;;;;8802:8;8811:1;8802:11;;;;;;;;;;;;;8788:55;;;;;;;;;;8867:11;8854:24;;8889:20;8926:1;8912:8;8921:1;8912:11;;;;;;;;;;;;;;:15;:34;;;;;8945:1;8931:8;8940:1;8931:11;;;;;;;;;;;;;;:15;8912:34;8889:57;;8957:18;8986:19;9016:23;9052:10;9065:23;89:1:4;9086::0;9065:9;:23::i;:::-;9052:36;;9099:1451;9106:10;;;;;:34;;;9129:11;9120:5;:20;;9106:34;9099:1451;;;9178:10;9259:457;;;;9395:133;133:1:4;9446:10:0;9483:8;9492:1;9483:11;;;;;;;9395:133;9346:8;9355:1;9346:11;;;;;;;;;;;;;9359:8;9368:1;9359:11;;;;;;;;;;;;;;;;;9299:229;;;;;;;-1:-1:-1;9299:229:0;-1:-1:-1;9299:229:0;-1:-1:-1;9551:18:0;9547:154;;9607:1;9594:14;;9676:5;;;9547:154;9732:11;9746:25;89:1:4;9765:5:0;9746:7;:25::i;:::-;9732:39;;9835:20;9870:21;9906:17;9938:25;9978:21;10003:59;133:1:4;10033:13:0;10048:5;10055:6;10003:17;:59::i;:::-;9834:228;;-1:-1:-1;9834:228:0;;-1:-1:-1;9834:228:0;-1:-1:-1;9834:228:0;-1:-1:-1;9834:228:0;-1:-1:-1;10099:34:0;9834:228;;10099:34;:20;:34;:::i;:::-;10163:9;;10077:56;;;10148:44;;-1:-1:-1;;;;;10163:9:0;10174:8;10184:7;10148:14;:44::i;:::-;10232:13;10213:15;:32;10209:277;;;10315:1;10302:14;;10380:5;;;;;;;;;10209:277;10439:31;:10;10454:15;10439:31;:14;:31;:::i;:::-;10426:44;;10510:28;89:1:4;10532:5:0;10510:10;:28::i;:::-;10502:36;;9099:1451;;;;;;;;;;10627:22;;10623:106;;10682:10;;10666:51;;-1:-1:-1;;;;;10682:10:0;10694:2;10698:18;10666:15;:51::i;:::-;10834:15;:33;;;;;10866:1;10853:10;:14;10834:33;:57;;;;;10880:11;10871:5;:20;;10834:57;10830:314;;;10997:135;133:1:4;11048:10:0;11081:8;11090:1;11081:11;;;;;;;10997:135;10952:8;10961:1;10952:11;;;;;;;;;;;;;10965:8;10974:1;10965:11;;;;;;;;;;;;;;;;;10908:224;;;;;;;-1:-1:-1;10908:224:0;-1:-1:-1;10908:224:0;-1:-1:-1;10830:314:0;11160:17;;11156:486;;11198:14;;11194:256;;11285:149;11331:10;11343:13;11358:8;11367:1;11358:11;;;;;;;;;;;;;;11371:8;11380:1;11371:11;;;;;;;;;;;;;;11409;11422;;11285:45;:149::i;:::-;-1:-1:-1;11233:201:0;;-1:-1:-1;11233:201:0;-1:-1:-1;11194:256:0;11484:9;;11495:10;;11466:71;;11480:2;;-1:-1:-1;;;;;11484:9:0;;;;11495:10;11507:13;11522:14;11466:13;:71::i;:::-;11560:15;;;:44;;;11593:11;11579:10;:8;:10::i;:::-;:25;;11560:44;11552:78;;;;;-1:-1:-1;;;11552:78:0;;;;;;;;;;;;-1:-1:-1;;;11552:78:0;;;;;;;;;;;;;;6037:299:13;6165:13;6202:126;6212:115;6250:76;6314:2;:11;;;6250:59;6303:5;6250:38;6280:7;6250:38;:9;6264:10;6250:25;:13;:25;:::i;:76::-;6212:33;6243:1;6212:26;6227:10;;6212:26;:14;:26;:::i;:115::-;6202:9;:126::i;:::-;6191:137;6037:299;-1:-1:-1;;;;;6037:299:13:o;583:98:14:-;641:7;672:1;668;:5;;;;;;;583:98;-1:-1:-1;;;583:98:14:o;6383:299:13:-;6513:13;6550:124;6560:113;6596:76;6666:5;6596:65;6649:2;:11;;;6596:38;6626:7;6596:38;:9;6610:10;6596:25;:13;:25;:::i;:76::-;6560:31;6589:1;6560:24;6574:9;;6560:24;:13;:24;:::i;2201:640:0:-;2359:13;2374:21;2397:17;2425:27;2454:23;2535:147;2591:9;2602:13;2617:5;2624:11;;2637:15;;2654:14;;2670:11;2535:41;:147::i;:::-;2490:192;;-1:-1:-1;2490:192:0;-1:-1:-1;2490:192:0;-1:-1:-1;2719:114:0;2749:48;2787:9;2749:37;:48::i;:::-;2799:8;2809:16;2827:5;2719:15;:114::i;:::-;2693:140;;;;;;;;2201:640;;;;;;;;;:::o;106:321:11:-;183:15;237:1;:8;226:1;:8;:19;215:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;215:31:11;-1:-1:-1;211:35:11;-1:-1:-1;262:6:11;257:70;274:1;:8;272:1;:10;257:70;;;311:1;313;311:4;;;;;;;;;;;;;;304:1;306;304:4;;;;;;;;;;;;;;;;;:11;284:3;;257:70;;;-1:-1:-1;344:6:11;339:81;356:1;:8;354:1;:10;339:81;;;404:1;406;404:4;;;;;;;;;;;;;;386:1;399;388;:8;:12;386:15;;;;;;;;;;;;;;;;;:22;366:3;;339:81;;;;106:321;;;;:::o;435:336::-;521:18;581:1;:8;570:1;:8;:19;556:34;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;556:34:11;-1:-1:-1;552:38:11;-1:-1:-1;606:6:11;601:70;618:1;:8;616:1;:10;601:70;;;655:1;657;655:4;;;;;;;;;;;;;;648:1;650;648:4;;;;;;;;-1:-1:-1;;;;;648:11:11;;;;:4;;;;;;;;;;;:11;-1:-1:-1;628:3:11;601:70;;;-1:-1:-1;688:6:11;683:81;700:1;:8;698:1;:10;683:81;;;748:1;750;748:4;;;;;;;;;;;;;;730:1;743;732;:8;:12;730:15;;;;;;;;-1:-1:-1;;;;;730:22:11;;;;:15;;;;;;;;;;;:22;-1:-1:-1;710:3:11;683:81;;3018:411:4;3281:9;3310:33;;;:22;:33;;;;;;;;:38;;;;;;;;;3366:9;;:55;;3417:4;3366:55;;;3378:33;;;;:22;:33;;;;;;;;:36;;;;;;;;;3366:55;3359:62;3018:411;-1:-1:-1;;;3018:411:4:o;4578:497:1:-;4720:7;;4702:33;;;-1:-1:-1;;;4702:33:1;;;;4687:12;;-1:-1:-1;;;;;4720:7:1;;4702:31;;:33;;;;;;;;;;;;;;4720:7;4702:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4702:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4702:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4702:33:1;;-1:-1:-1;4750:6:1;4746:322;4762:8;:15;4760:1;:17;4746:322;;;-1:-1:-1;;;;;4803:13:1;;;;;;;4799:258;;;4842:4;-1:-1:-1;;;;;4836:20:1;;4857:7;4865:1;4857:10;;;;;;;;;;;;;;4836:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4836:32:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4836:32:1;;;;4887:55;4918:8;4927:1;4918:11;;;;;;;;;;;;;;4931:7;4939:1;4931:10;;;;;;;;;;;;;;4887:30;:55::i;:::-;4799:258;;;4996:45;5010:5;5017:8;5026:1;5017:11;;;;;;;;;;;;;;5030:7;5038:1;5030:10;;;;;;;;;;;;;;4996:13;:45::i;:::-;4779:3;;4746:322;;3846:986:13;4032:15;4049:19;4070;4102:13;4118:48;4127:11;4140:12;4154:11;4118:8;:48::i;:::-;4102:64;;4275:11;4264:8;:22;4260:565;;;4321:123;4395:48;4425:2;:17;;;4395:25;:11;4411:8;4395:25;:15;:25;:::i;:48::-;4321:51;4354:2;:17;;;4321:28;:11;4337;4321:28;:15;:28;:::i;:123::-;4303:142;;4494:1;4477:14;:18;:39;;4515:1;4477:39;;;4498:14;4477:39;4460:56;;4554:14;4539:11;:29;;4531:66;;;;;-1:-1:-1;;;4531:66:13;;;;;;;;;;;;-1:-1:-1;;;4531:66:13;;;;;;;;;;;;;;;4644:31;:11;4660:14;4644:31;:15;:31;:::i;:::-;4612:98;-1:-1:-1;4677:32:13;;;;-1:-1:-1;4260:565:13;;;4784:11;;-1:-1:-1;4797:15:13;;-1:-1:-1;4260:565:13;3846:986;;;;;;;;;;;:::o;3842:855:0:-;4040:4;;4017:41;;4031:7;;-1:-1:-1;;;;;4040:4:0;4046:11;4017:13;:41::i;:::-;4135:4;;4120:29;;;-1:-1:-1;;;4120:29:0;;;;4072:15;;;;-1:-1:-1;;;;;4135:4:0;;;;4120:27;;:29;;;;;;;;;;;;;;;4135:4;4120:29;;;5:2:-1;;;;30:1;27;20:12;5:2;4120:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4120:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4120:29:0;-1:-1:-1;;;;;4108:41:0;;;;;;:106;;4192:12;4211:1;4108:106;;;4171:1;4175:12;4108:106;4260:7;;4242:33;;;-1:-1:-1;;;4242:33:0;;;;4071:143;;-1:-1:-1;4071:143:0;;-1:-1:-1;4227:12:0;;-1:-1:-1;;;;;4260:7:0;;;;4242:31;;:33;;;;;;;;;;;;;;4260:7;4242:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4242:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4242:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4242:33:0;;-1:-1:-1;;;;;;4290:16:0;;;;;;;4286:364;;;4338:4;;4396:12;;;4338:4;4396:12;;;;;;;;;;-1:-1:-1;;;4323:86:0;;;;;;;;;;;;;;4389:4;4323:86;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4338:4:0;;;;4323:33;;:86;;;;4389:4;;4396:12;;4323:86;;;;;;;4396:12;4323:86;;;;4396:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4323:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4323:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4424:34:0;;;-1:-1:-1;;;4424:34:0;;;;;;;;;;-1:-1:-1;;;;;4424:20:0;;;-1:-1:-1;4424:20:0;;-1:-1:-1;4424:34:0;;;;;-1:-1:-1;;4424:34:0;;;;;;;-1:-1:-1;4424:20:0;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;4424:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4424:34:0;;;;4473:48;4504:2;4508:12;4473:30;:48::i;:::-;4286:364;;;4578:4;;4625:12;;;4578:4;4625:12;;;;;;;;;-1:-1:-1;;;;;4578:4:0;;;;4563:33;;4597:10;;4609;;4621:2;;4625:12;;4563:75;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4563:75:0;-1:-1:-1;;;;;4563:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4563:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4563:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4563:75:0;;;;4286:364;4677:4;;4662:27;;;-1:-1:-1;;;;;;4662:27:0;;;;-1:-1:-1;;;;;4677:4:0;;;;4662:25;;:27;;;;;4677:4;;4662:27;;;;;;;;4677:4;;4662:27;;;5:2:-1;;;;30:1;27;20:12;5:2;4662:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4662:27:0;;;;3842:855;;;;;;;;:::o;5666:132:1:-;5738:16;:18;;;;;;;;5666:132;:::o;658:250:3:-;759:26;862:31;;;:20;:31;;;;;;;;:38;;;;;;;;;822:30;;;:19;:30;;;;;:37;;;;;;;;:78;;658:250::o;1633:667:4:-;1755:21;1779:37;;;:26;:37;;;;;;1831:21;1827:414;;1886:33;;;;:22;:33;;;;;;;;:36;;;;;;;;;:44;;;1945:40;;;;;:44;1827:414;;;2032:13;2047:14;2065:31;2079:9;2090:5;2065:13;:31::i;:::-;2111:33;;;;:22;:33;;;;;;;;:43;;;;;;;;;:51;;;2177:40;;;;;;;:52;-1:-1:-1;;1827:414:4;-1:-1:-1;;2253:37:4;;;;:26;:37;;;;;:39;;;;;;1633:667::o;929:273:3:-;1035:9;1047:30;;;:19;:30;;;;;;;;:37;;;;;;;;;;;1095:29;;;;;;;;;:36;;;;;;;;:42;;;;;;;;;:49;;;;1155:37;;;;;:39;;;;;;929:273::o;2538:1032::-;2644:10;2670:31;;;:20;:31;;;;;;;;:38;;;;;;;;;2710:30;;;:19;:30;;;;;:37;;;;;;;;;;2767:12;;;2759:38;;;;;-1:-1:-1;;;2759:38:3;;;;;;;;;;;;-1:-1:-1;;;2759:38:3;;;;;;;;;;;;;;;2894:8;2905:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;;3002:1;2996:7;;2984:361;3007:4;3005:1;:6;2984:361;;;3044:4;3037:3;:11;3033:57;;;3069:5;;3033:57;3112:18;:29;;;;;;;;;;;:36;;;;;;;;:39;;;;;;;;;;3227:45;;;3112:39;;-1:-1:-1;;3013:3:3;2984:361;;;;3428:3;3420:4;:11;3412:36;;;;;-1:-1:-1;;;3412:36:3;;;;;;;;;;;;-1:-1:-1;;;3412:36:3;;;;;;;;;;;;;;;-1:-1:-1;;;3468:18:3;:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;3461:50;;;3522:31;;;:20;:31;;;;;;:38;;;;;;;;;;:40;;;;;;;-1:-1:-1;2538:1032:3:o;2308:463:4:-;2431:13;2446:14;2464:31;2478:9;2489:5;2464:13;:31::i;:::-;2430:65;;;;2523:9;2514:5;:18;2506:44;;;;;-1:-1:-1;;;2506:44:4;;;;;;;;;;;;-1:-1:-1;;;2506:44:4;;;;;;;;;;;;;;;2607:33;;;;:22;:33;;;;;;;;:44;;;;;;;;;;;2561:43;;;;;;:90;;;;2662:51;;;;2724:37;;;:26;:37;;;;;;:39;;-1:-1:-1;;2724:39:4;;;-1:-1:-1;2308:463:4:o;1315:195:15:-;1423:12;;;1385;1423;;;;;;;;;;1402:34;;1385:12;;-1:-1:-1;;;;;1402:7:15;;;1416:5;;1423:12;;;;;;;1402:34;1423:12;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1402:34:15;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1384:52:15;;;1455:7;1447:55;;;;-1:-1:-1;;;1447:55:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1458:223:13;1589:14;1628:45;1667:5;1628:34;:11;1644:2;:17;;;1628:34;:15;:34;:::i;5020:970::-;5207:15;5224:18;5244;5275:13;5291:48;5300:11;5313:12;5327:11;5291:8;:48::i;:::-;5275:64;;5447:11;5436:8;:22;5432:551;;;5492:121;5563:49;5603:8;5563:35;:12;5580:2;:17;;;5563:35;:16;:35;:::i;:49::-;5492:52;5532:11;5492:35;:12;5509:2;:17;;;5492:35;:16;:35;:::i;:121::-;5475:139;;5661:1;5645:13;:17;:37;;5681:1;5645:37;;;5665:13;5645:37;5629:53;;5720:13;5705:11;:28;;5697:64;;;;;-1:-1:-1;;;5697:64:13;;;;;;;;;;;;-1:-1:-1;;;5697:64:13;;;;;;;;;;;;;;317:303:12;362:6;389:1;385;:5;381:232;;;-1:-1:-1;411:1:12;444;440;436:5;;:9;460:92;471:1;467;:5;460:92;;;497:1;493:5;;535:1;530;526;522;:5;;;;;;:9;521:15;;;;;;517:19;;460:92;;;381:232;;;;573:6;;569:44;;-1:-1:-1;600:1:12;317:303;;;:::o;298:1895:0:-;459:27;;542:16;524:15;;604:24;611:9;622:5;604:6;:24::i;:::-;590:38;;639:28;684:6;670:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;670:21:0;;639:52;;702:24;740:6;729:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;729:18:0;;702:45;;758:1057;773:6;765:5;:14;:32;;;;;796:1;783:10;:14;765:32;758:1057;;;814:12;829:22;834:9;845:5;829:4;:22::i;:::-;814:37;-1:-1:-1;870:12:0;866:23;;884:5;;;866:23;904:18;;:::i;:::-;-1:-1:-1;925:21:0;;;;:12;:21;;;;;;;;;904:42;;;;;;;;;-1:-1:-1;;;;;904:42:0;;;;;-1:-1:-1;904:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;904:42:0;;;;;;;;;;;;;;;;;;961:18;;;;973:5;;961:18;;;;;;-1:-1:-1;;;;;961:29:0;;;:18;;;;;;;;;;;:29;-1:-1:-1;1036:18:0;;;1005:15;;1023:31;;:65;;1078:10;1023:65;;;1057:5;:18;;;1023:65;1005:83;;1145:10;1124:5;:18;;;:31;1103:5;:18;;:52;;;;;1190:10;1170;1181:5;1170:17;;;;;;;;;;;;;;;;;:30;1272:18;;;;1230:23;;;;;1272;1268:318;;1353:18;;;;;1316:21;;;;:12;:21;;;;;;;;;:34;;:55;;;;1420:8;;;;1407:11;;1430;;;;;1443:17;;;;;1462:40;;1504:15;;;;1395:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1395:125:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;1539:7:0;;;;;-1:-1:-1;1565:5:0;;1268:318;1602:36;1632:5;1602:29;:36::i;:::-;1685:8;;;;;1672:11;;1695;;;;;1708:17;;;;;-1:-1:-1;1727:36:0;;;1765:15;;;;1660:121;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1660:121:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1796:7:0;;;;;-1:-1:-1;758:1057:0;;;1831:9;;1827:359;;1870:37;1888:11;1901:5;1870:17;:37::i;:::-;1857:50;;1945:5;1934:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1934:17:0;;1922:29;;1994:10;:17;1974:9;:16;:37;;1966:63;;;;;-1:-1:-1;;;1966:63:0;;;;;;;;;;;;-1:-1:-1;;;1966:63:0;;;;;;;;;;;;;;;2049:6;2044:131;2059:5;2057:1;:7;2044:131;;;2105:54;2142:16;2105:32;2123:10;2134:1;2123:13;;;;;;;;;;;;;;2105;:17;;:32;;;;:::i;:54::-;2090:9;2100:1;2090:12;;;;;;;;;;;;;;;;;:69;2066:3;;2044:131;;;;1827:359;298:1895;;;;;;;;;;;;:::o;3424:231:13:-;3520:10;3546:16;;3542:106;;3625:11;3587:35;:12;3604:2;:17;;;3587:35;:16;:35;:::i;:::-;:49;;;;;;;3424:231;-1:-1:-1;;;;3424:231:13:o;805:820:4:-;913:13;973:33;;;:22;:33;;;;;;;;:36;;;;;;;;;89:1;1025:22;;1021:597;;;1085:216;1098:5;1091:4;:12;1085:216;;;1165:33;;;;:22;:33;;;;;;;;:39;;;;;;;;;1135:4;;-1:-1:-1;1227:9:4;1223:63;;1261:5;;1223:63;1085:216;;;1021:597;;;133:1;1331:9;:23;1327:291;;;1391:216;1404:5;1397:4;:12;1391:216;;;1471:33;;;;:22;:33;;;;;;;;:39;;;;;;;;;1441:4;;-1:-1:-1;1533:9:4;1529:63;;1567:5;;1529:63;1391:216;;;805:820;;;;;:::o;1708:340:3:-;1807:9;1856:31;;;:20;:31;;;;;;;;:38;;;;;;;;;1896:30;;;:19;:30;;;;;:37;;;;;;;;;1949:13;;;1945:96;;1986:18;:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;;-1:-1:-1;1945:96:3;1708:340;;;;;;:::o;7529:986:1:-;7655:33;7659:5;:15;;;7676:5;:11;;;7655:3;:33::i;:::-;-1:-1:-1;7763:13:1;;;;;7750:27;;;;:12;:27;;;;;;;7743:34;;-1:-1:-1;;;;;;7743:34:1;;;;;-1:-1:-1;7743:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7852:11;;-1:-1:-1;;;;;7841:23:1;;;:10;:23;;;:30;7906:16;;;;7890:32;;7882:63;;;;;-1:-1:-1;;;7882:63:1;;;;;;;;;;;;-1:-1:-1;;;7882:63:1;;;;;;;;;;;;;;779:383:11;855:18;904:1;:8;894:6;:18;;886:45;;;;;-1:-1:-1;;;886:45:11;;;;;;;;;;;;-1:-1:-1;;;886:45:11;;;;;;;;;;;;;;;956:1;:8;946:6;:18;942:213;;;-1:-1:-1;985:1:11;942:213;;;1046:6;1032:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1032:21:11;-1:-1:-1;1028:25:11;-1:-1:-1;1073:6:11;1068:76;1085:6;1083:1;:8;1068:76;;;1124:1;1126;1124:4;;;;;;;;;;;;;;1117:1;1119;1117:4;;;;;;;;-1:-1:-1;;;;;1117:11:11;;;;:4;;;;;;;;;;;:11;-1:-1:-1;1093:3:11;1068:76;;1222:448:3;1310:9;1359:31;;;:20;:31;;;;;;;;:38;;;;;;;;;1399:30;;;:19;:30;;;;;:37;;;;;;;;;1452:13;;;1448:215;;-1:-1:-1;1488:18:3;:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;;;1546:50;;;;1611:31;;;-1:-1:-1;1611:31:3;;;;;;:38;;;;;;;:40;;;;;;;;-1:-1:-1;1488:43:3;1222:448::o;134:20653:0:-;;;;;;;;;-1:-1:-1;134:20653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;134:20653:0;;;;;;;;;;;;;;;;;;;:::o"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountRemain\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountRemain\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderUpdate\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseDecimal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"cancelLimitOrder\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"createBuyLimitOrder\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"createSellLimitOrder\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutOffer\",\"type\":\"uint256\"}],\"name\":\"getAmountInForMovePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInGet\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveQuote\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInOffer\",\"type\":\"uint256\"}],\"name\":\"getAmountOutForMovePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutGet\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveQuote\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserveBase\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserveQuote\",\"type\":\"uint112\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserOrders\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"orderIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_priceStep\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"direction\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxSize\",\"type\":\"uint32\"}],\"name\":\"marketBook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"marketOrder\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"order\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"marketOrders\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountRemain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"orderType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"orderIndex\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMinAmount\",\"type\":\"uint256\"}],\"name\":\"minAmountUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceDecimal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"decimal\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceStep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPriceStep\",\"type\":\"uint256\"}],\"name\":\"priceStepUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"protocolFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolFeeRate\",\"type\":\"uint256\"}],\"name\":\"protocolFeeRateUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"quoteBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"quoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"direction\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"rangeBook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"safeRefund\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"subsidyFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSubsidyFeeRate\",\"type\":\"uint256\"}],\"name\":\"subsidyFeeRateUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"takeOrderWhenMovePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutLeft\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"userOrders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{\"getAmountOutForMovePrice(address,uint256)\":{\"notice\":\"***************************************************************************************************** called by uniswap v2 pair and router******************************************************************************************************\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/OrderBook.sol\":\"OrderBook\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/OrderBook.sol\":{\"keccak256\":\"0x5eb70ddccf4bd07be31efe9d4f7de0b5f4bed81f8daf56ac063049dd3e79f0c0\",\"urls\":[\"bzz-raw://141840d6730627c871e0aa7e843234d39ac2ca37cba6d864e248e1c435ade2ab\",\"dweb:/ipfs/QmaZiLgNRBMosGdJHd8HMDthYhQVx6JBg59Z7MU8UruQt2\"]},\"contracts/OrderBookBase.sol\":{\"keccak256\":\"0xd0b4c994c9dcf3dede743375df588228da108bb06a90c6082aecd4b1ea26d27d\",\"urls\":[\"bzz-raw://87b8b068299afd3df1ace44241f532b77a8c1070d239ce1c3333d50dd73d9225\",\"dweb:/ipfs/QmYKqbUDHqZP6yUmDw9TqGiG2xZeTLjnuXjJcyJpEohPSs\"]},\"contracts/OrderQueue.sol\":{\"keccak256\":\"0xff95f47ee4f3cbbe23fb7053e0c37f0b5a1c7956c4bb02a485e45f2af18f71e0\",\"urls\":[\"bzz-raw://b8c4b29969132a3d23e39d7714e2fb67f24fbd2228814dec6bcb5c804b60d47d\",\"dweb:/ipfs/Qmd3yArMBcUAd91LBGA3yahwdQWRcMSpvMP3kwg7haFkzr\"]},\"contracts/PriceList.sol\":{\"keccak256\":\"0x6fd878052bb8499a721cae3d9e3d8f865bb276c62b438cb6d3f2af6f34888fad\",\"urls\":[\"bzz-raw://17010905206b30d535c293c05e0530e7ffdb3667f7c5a927138b67ad470cf813\",\"dweb:/ipfs/QmXXxxKz9YRc9tLiaSA3QnM8sGccFMgYH9G8ScxMTJgbTZ\"]},\"contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xa791b279660ee5eb66ebd4f23b539055d178ae24677f3a164567441ecfdcf73a\",\"urls\":[\"bzz-raw://06f36f585a8b82eb388ccccc4e8c483718a99a07f5f12d3217afc254ab139a68\",\"dweb:/ipfs/Qmedr3aAH6F3ZTgZJ3enoP92ZD8yNwiCStwtGknNXhiK8v\"]},\"contracts/interfaces/IOrderBook.sol\":{\"keccak256\":\"0x88c44365451e69c40779ed92c98b683b8d8e2b1689ffe4c2d388faf476fe1314\",\"urls\":[\"bzz-raw://5d1f23ba83fb1960400c70362b5f0bcae2fb26d8c8d581a9b8164d8d91fdb325\",\"dweb:/ipfs/QmTY1cYugvuWb5VinnxQZkLgRTZ9yXFs6ivk2obwvzrNGJ\"]},\"contracts/interfaces/IOrderBookFactory.sol\":{\"keccak256\":\"0x35de3f95ee0847aaf2a398e43acaa993f3f38ec89a02546993a338418c14276f\",\"urls\":[\"bzz-raw://6b87e84de0469baa8c646769d164ae4241311ddb36d61f495e0ef3233d9e41f4\",\"dweb:/ipfs/QmYMBYbH6zPLzfnf43wiyBftSuzpPAwAz1cVQBm7qpsMmU\"]},\"contracts/interfaces/IUniswapV2Factory.sol\":{\"keccak256\":\"0x7b2a8203923ba2af5ec2ea54f655ac40fc32c9bc5b00ed01058326fc212763c4\",\"urls\":[\"bzz-raw://72d5966709eec21964685c47b8ee017e22ae9f616b516e77f0754259d01690ec\",\"dweb:/ipfs/QmS4gyruWoRR3Ab2enF9omwpmFXcZXSB3c9azNRM7cYNop\"]},\"contracts/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x581f0f810f88942f26211b503fdabb786826abb59741624cf985c09ee6a76e03\",\"urls\":[\"bzz-raw://d7b6d788a4524585bdfb8b6a7213d46284a81f896e011143b2acacbbd5c7a1e0\",\"dweb:/ipfs/QmayLfvKFDQQAEbK2zyfoe3KDz9EdH8nnwVYqTDbvCtncA\"]},\"contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0x25ed8b4dd0b9382d61501d7fe6f30ea65e6800907ba4a5a0f280e79c80bdfd86\",\"urls\":[\"bzz-raw://72c047f1ad25724c269cfb87f9291558a2723d90ef8b25224caf84e04123a52f\",\"dweb:/ipfs/QmXjW9nmRTasWKYGMnQRBGRHJg2AbT6Z4azWowuST1bLu3\"]},\"contracts/libraries/Arrays.sol\":{\"keccak256\":\"0x31f2775eea5fe5e81a014fbf8b244f4cd2e24f6fb8ebe837095ba63ed594765b\",\"urls\":[\"bzz-raw://30330f7e9ca3f4b04273713517d9392b6f6f65bdef011893fa1b1ca455a6d286\",\"dweb:/ipfs/Qmd5F2W2pc7wVFcNTsULT6cQcqwijy3SLcMYU3mG9q5GbD\"]},\"contracts/libraries/Math.sol\":{\"keccak256\":\"0xccbb532d91028652fd3b3df3ae1b02ba0ab62af320270c702587816501e6d219\",\"urls\":[\"bzz-raw://49e097b670fa636d85b6da78f645462d33b1d9f334a290e70ff76a1705e08877\",\"dweb:/ipfs/QmTywL9AbXJMHoYsiyyUdftnc4hig4y2srNJifgCHth3LH\"]},\"contracts/libraries/OrderBookLibrary.sol\":{\"keccak256\":\"0x4b636198fcc43ea259db9c255f2c479e67cda5b79144d425f3f12bd337bd7bc3\",\"urls\":[\"bzz-raw://cfda742ee6730d24dfbe5b76cab91ce06ffdf0f451e8a8cc7b29bb87fbbda277\",\"dweb:/ipfs/QmVqyAAsVmPGq7AqCuxeWKRFDVfgGKhw7t5MPvTL1onJwi\"]},\"contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x2ec47d2360eaf97d08df4e022201f5ab70e1e1feeb2b7da46b43fab649898a39\",\"urls\":[\"bzz-raw://56be45e5cc62e8e48567ada0407699c2826665359eed633da14d00f67efd95bc\",\"dweb:/ipfs/QmXrXoZ9Ho8SdWjXC2BEzDiDVURPTTzBXiqfcPnQsg1GSB\"]},\"contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x43ca45ce883d480bab2394b7cc50633c713a5bf77496fe55e0dd1373b4cbddf8\",\"urls\":[\"bzz-raw://a86702c285ff5a32f3195bab61af9a0e78f44423d737a9f904cd3077e018f344\",\"dweb:/ipfs/QmZTWpAZXzDaNjdLTMHduK97KNvv2uCWXoeb7nXitv3PLZ\"]},\"contracts/libraries/UQ112x112.sol\":{\"keccak256\":\"0x394bda0ad101756150be3737eb405eec14da4bd756e8a65f5a110f73565f5dcd\",\"urls\":[\"bzz-raw://c0b40cd3cf66546fb5854ee374aa2a40e6103a2b2616cee3c27ce80dcb76d5bf\",\"dweb:/ipfs/QmfURbSAc6ZTekkrfGdkCqv6bU27dfnbVKgSDqHHavGCae\"]}},\"version\":1}",
      "interface": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCanceled",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderClosed",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCreated",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderUpdate",
          "type": "event"
        },
        {
          "payable": true,
          "stateMutability": "payable",
          "type": "fallback"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "cancelLimitOrder",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createBuyLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createSellLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "factory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOutOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountInForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountInGet",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountInOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountOutForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOutGet",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserveBase",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserveQuote",
              "type": "uint112"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "name": "getUserOrders",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "orderIds",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "_pair",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_minAmount",
              "type": "uint256"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "maxSize",
              "type": "uint32"
            }
          ],
          "name": "marketBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "marketOrder",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "order",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "marketOrders",
          "outputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderType",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderIndex",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "minAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newMinAmount",
              "type": "uint256"
            }
          ],
          "name": "minAmountUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pair",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "decimal",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceStep",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newPriceStep",
              "type": "uint256"
            }
          ],
          "name": "priceStepUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "protocolFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newProtocolFeeRate",
              "type": "uint256"
            }
          ],
          "name": "protocolFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "name": "rangeBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address payable",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "safeRefund",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "subsidyFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newSubsidyFeeRate",
              "type": "uint256"
            }
          ],
          "name": "subsidyFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "takeOrderWhenMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOutLeft",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "accounts",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "userOrders",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "bytecode": "60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032",
      "bin": "60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032",
      "bin-runtime": "60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032",
      "srcmap": "134:20653:0:-;;;5470:1:1;5446:25;;2736:7;:20;;-1:-1:-1;;;;;;2736:20:1;2746:10;2736:20;;;-1:-1:-1;;134:20653:0;-1:-1:-1;134:20653:0;;",
      "srcmap-runtime": "134:20653:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18668:2116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18668:2116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18668:2116:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18668:2116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18668:2116:0;;;;;;;;;;;;;;;;;;;;848:49:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;848:49:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;848:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16521:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16521:210:1;;;:::i;:::-;;;;-1:-1:-1;;;;;16521:210:1;;;;;;;;;;;;;;;;;;;;;;;;15221:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15221:299:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15221:299:1;;:::i;1348:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1348:25:1;;;:::i;:::-;;;;-1:-1:-1;;;;;1348:25:1;;;;;;;;;;;;;;1833:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1833:42:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1833:42:1;;:::i;:::-;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1833:42:1;;;;;;;;;;;;;;;;;;;;;1408:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1408:23:1;;;:::i;:::-;;;;;;;;;;;;;;;;12724:467;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12724:467:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12724:467:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12724:467:1;;;;;;;;;;;;;;;;;1571:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1571:27:1;;;:::i;14866:318::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14866:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14866:318:1;;:::i;5806:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5806:130:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5806:130:1;-1:-1:-1;;;;;5806:130:1;;:::i;11585:1111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11585:1111:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11585:1111:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;1936:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1936:44:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1936:44:1;;-1:-1:-1;;;;;1936:44:1;;;;;;:::i;1089:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1089:21:1;;;:::i;11712:1115:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11712:1115:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11712:1115:0;;;;;;;;;;;;;;;;;:::i;5944:306:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5944:306:1;;;:::i;1149:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1149:21:1;;;:::i;13895:650:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13895:650:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13895:650:0;;:::i;2829:967:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2829:967:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2829:967:1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;980:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:19:1;;;:::i;6258:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6258:132:1;;;:::i;14848:1887:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14848:1887:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14848:1887:0;;-1:-1:-1;;;;;14848:1887:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;932:22:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:22:1;;;:::i;1297:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1297:24:1;;;:::i;15599:914::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15599:914:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15599:914:1;;;;;;;;;;:::i;1245:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1245:23:1;;;:::i;14023:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14023:350:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14023:350:1;;:::i;10845:691::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10845:691:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10845:691:1;;;;;;;;;:::i;16743:1917:0:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16743:1917:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16743:1917:0;;-1:-1:-1;;;;;16743:1917:0;;;;;;:::i;12889:998::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12889:998:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12889:998:0;;;;;;;;;;;;;;;;;:::i;14407:350:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14407:350:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14407:350:1;;:::i;1464:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1464:24:1;;;:::i;1717:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1717:26:1;;;:::i;18668:2116:0:-;18782:18;18802:25;18829:21;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;18952:4:0;;-1:-1:-1;;;;;18952:4:0;18938:10;:18;18930:45;;;;;-1:-1:-1;;;18930:45:0;;;;;;;;;;;;-1:-1:-1;;;18930:45:0;;;;;;;;;;;;;;;19011:13;;;19022:1;19011:13;;;18986:22;19011:13;;;;;18986:22;19011:13;;;;;105:10:-1;19011:13:0;88:34:-1;-1:-1;;19122:4:0;;19128:9;;19139:10;;18986:38;;-1:-1:-1;19093:57:0;;-1:-1:-1;;;;;19122:4:0;;;;-1:-1:-1;19128:9:0;;;;19139:10;19093:28;:57::i;:::-;19065:11;;-1:-1:-1;;;;;19064:86:0;;;;;;;;;19065:8;;19074:1;;19065:11;;;;;;;;;19078:8;19087:1;19078:11;;;;;;;;;;;;;;;;;19064:86;;;;;19210:13;19226:23;19241:7;19226:14;:23::i;:::-;19210:39;;19260:13;19276:47;19314:8;19276:37;:47::i;:::-;19260:63;;19337:10;19349:11;19364:21;19373:8;19383:1;19364:8;:21::i;:::-;19336:49;;;;19540:918;19547:10;;19540:918;;19642:18;19681:207;19738:8;19765;19792;19801:1;19792:11;;;;;;;;;;;;;;19822:8;19831:1;19822:11;;;;;;;;;;;;;;19852:5;19876:11;;19681:38;:207::i;:::-;19641:247;;;;;;19907:13;19924:1;19907:18;19903:64;;;19946:5;;;19903:64;20067:20;20159:79;20176:2;20180:8;20190:13;20205:5;20212:6;20220:8;20230:7;20159:16;:79::i;:::-;20102:136;;-1:-1:-1;20102:136:0;-1:-1:-1;20102:136:0;;-1:-1:-1;20264:29:0;;-1:-1:-1;20264:8:0;20102:136;20264:29;:12;:29;:::i;:::-;20253:40;;20331:13;20312:15;:32;20308:78;;;20365:5;;;;20308:78;20420:26;20430:8;20440:5;20420:9;:26::i;:::-;20402:44;;-1:-1:-1;20402:44:0;-1:-1:-1;19540:918:0;;-1:-1:-1;;19540:918:0;;20495:16;:14;:16::i;:::-;20528:12;;20524:253;;89:1:4;20574:8:0;:21;:191;;20700:65;20730:8;20740;20749:1;20740:11;;;;;;;;;;;;;;20753:8;20762:1;20753:11;;;;;;;;;;;;;;20700:29;:65::i;:::-;20574:191;;;20615:65;20645:8;20655;20664:1;20655:11;;;;;;;;;;;;;;20668:8;20677:1;20668:11;;;;;;;20615:65;20557:208;;;;20524:253;5571:1:1;;;;;5594;5583:8;:12;;;;18668:2116:0;;;;;;;:::o;848:49:1:-;;;;;;;;;;;;;-1:-1:-1;;;848:49:1;;;;;:::o;16521:210::-;16695:4;;16701:9;;16712:10;;16582:19;;;;16666:57;;-1:-1:-1;;;;;16695:4:1;;;;16701:9;;;;16712:10;16666:28;:57::i;:::-;16636:87;;;;-1:-1:-1;16521:210:1;-1:-1:-1;16521:210:1:o;15221:299::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15348:7;;15322:34;;-1:-1:-1;;;;;15348:7:1;15322:25;:34::i;:::-;-1:-1:-1;;;;;15308:48:1;:10;:48;15300:70;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;;;;15410:3;15389:17;:24;;15381:53;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;;;;15478:14;:34;5594:1;5583:8;:12;15221:299::o;1348:25::-;;;-1:-1:-1;;;;;1348:25:1;;:::o;1833:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;;:::o;1408:23::-;;;;:::o;12724:467::-;12852:13;;;12863:1;12852:13;;;;;;;;;12813:19;;12852:13;;;17:15:-1;;105:10;12852:13:1;88:34:-1;136:17;;-1:-1;12852:13:1;12844:21;;12876:14;;:::i;:::-;-1:-1:-1;12893:21:1;;;;:12;:21;;;;;;;;12876:38;;;;;;;;;-1:-1:-1;;;;;12876:38:1;;;;;;-1:-1:-1;12876:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12876:38:1;;;;;;;;;;;;;;;;;;12925:8;;12876:38;;12925:8;;;;;;;;;;;:26;;;;;12980:1;:4;;;-1:-1:-1;;;;;12973:12:1;12962:5;12968:1;12962:8;;;;;;;;;;;;;:23;;;;;13007:1;:9;;;12996:5;13002:1;12996:8;;;;;;;;;;;;;:20;;;;;13038:1;:7;;;13027:5;13033:1;13027:8;;;;;;;;;;;;;:18;;;;;13067:1;:13;;;13056:5;13062:1;13056:8;;;;;;;;;;;;;:24;;;;;13102:1;:14;;;13091:5;13097:1;13091:8;;;;;;;;;;;;;:25;;;;;13138:1;:11;;;13127:5;13133:1;13127:8;;;;;;;;;;;;;:22;;;;;13171:1;:12;;;13160:5;13166:1;13160:8;;;;;;;;;;;;;:23;;;;;12724:467;;;;:::o;1571:27::-;;;;:::o;14866:318::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14995:7;;14969:34;;-1:-1:-1;;;;;14995:7:1;14969:25;:34::i;:::-;-1:-1:-1;;;;;14955:48:1;:10;:48;14947:83;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;;;;15071:2;15049:18;:24;;15041:53;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;;;;15140:15;:36;5594:1;5583:8;:12;14866:318::o;5806:130::-;-1:-1:-1;;;;;5912:16:1;;;;;;:10;:16;;;;;;;;;5901:27;;;;;;;;;;;;;;;;;5866:22;;5901:27;;;5912:16;5901:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:130;;;:::o;11585:1111::-;11670:20;11692:21;11726:13;11742:23;11752:9;11763:1;11742:9;:23::i;:::-;11726:39;;11776:16;89:1:4;11807:9:1;:22;11803:422;;;11846:149;11852:13;;;;;:34;;;11881:5;11869:8;:17;;11852:34;11846:149;;;11917:30;11927:9;11938:8;11917:9;:30::i;:::-;11906:41;-1:-1:-1;11966:13:1;;11846:149;;;11803:422;;;133:1:4;12025:9:1;:23;12021:204;;;12065:149;12071:13;;;;;:34;;;12100:5;12088:8;:17;;12071:34;12065:149;;;12136:30;12146:9;12157:8;12136:9;:30::i;:::-;12125:41;-1:-1:-1;12185:13:1;;12065:149;;;12241:15;;12237:452;;12293:11;12282:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12282:23:1;;12273:32;;12341:11;12330:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12330:23:1;;12320:33;;12379:23;12389:9;12400:1;12379:9;:23::i;:::-;12368:34;;12417:10;12442:236;12456:11;12448:5;:19;12442:236;;;12504:8;12488:6;12495:5;12488:13;;;;;;;;;;;;;:24;;;;;12548:28;12556:9;12567:8;12548:7;:28::i;:::-;12531:7;12539:5;12531:14;;;;;;;;;;;;;:45;;;;;12606:30;12616:9;12627:8;12606:9;:30::i;:::-;12595:41;-1:-1:-1;12655:7:1;;12442:236;;;12237:452;;11585:1111;;;;;;;:::o;1936:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1089:21::-;;;;:::o;11712:1115:0:-;11845:12;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;11878:9:0;;;;;:35;;;11899:9;;11891:5;:17;;;;;;:22;11878:35;11870:61;;;;;-1:-1:-1;;;11870:61:0;;;;;;;;;;;;-1:-1:-1;;;11870:61:0;;;;;;;;;;;;;;;12008:7;;-1:-1:-1;;;;;12008:7:0;11950:54;12008:7;11950:45;:54::i;:::-;-1:-1:-1;;;;;11950:65:0;;11942:112;;;;;-1:-1:-1;;;11942:112:0;;;;;;;;;;;;-1:-1:-1;;;11942:112:0;;;;;;;;;;;;;;;12130:12;12145:18;:16;:18::i;:::-;12130:33;;12174:16;12203:12;;12193:7;:22;:51;;12243:1;12193:51;;;12228:12;;12218:7;:22;12193:51;12174:70;;12255:19;12277:83;12330:9;;12341:5;12348:11;;12277:52;:83::i;:::-;12255:105;;12394:14;12379:11;:29;;12371:56;;;;;-1:-1:-1;;;12371:56:0;;;;;;;;;;;;-1:-1:-1;;;12371:56:0;;;;;;;;;;;;;;;12455:4;;12440:31;;;-1:-1:-1;;;12440:31:0;;-1:-1:-1;;;;;12440:31:0;;;;;;;;;12455:4;;;;;-1:-1:-1;;12440:31:0;;;;;-1:-1:-1;;12440:31:0;;;;;;;-1:-1:-1;12455:4:0;12440:31;;;5:2:-1;;;;30:1;27;20:12;5:2;12440:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12440:31:0;;;;12482:17;12502:36;12515:11;12528:5;12535:2;12502:12;:36::i;:::-;12482:56;-1:-1:-1;12553:17:0;;12549:216;;12597:69;12612:4;12618:2;12622:11;12635:12;12649:5;89:1:4;12597:14:0;:69::i;:::-;12686:67;;;;;;;;;;;;;;;;;;;89:1:4;12686:67:0;;;;;;-1:-1:-1;;;12587:79:0;;-1:-1:-1;;;;;;12686:67:0;;;;;;;;;;;-1:-1:-1;;;;;;;12686:67:0;;;;;;;;;12549:216;12803:16;:14;:16::i;:::-;-1:-1:-1;;5594:1:1;5583:8;:12;-1:-1:-1;11712:1115:0;;;-1:-1:-1;;;;11712:1115:0:o;5944:306:1:-;6098:4;;6104:9;;6115:10;;6000;;;;;;6069:57;;-1:-1:-1;;;;;6098:4:1;;;;6104:9;;;6115:10;6069:28;:57::i;:::-;6023:103;;-1:-1:-1;6023:103:1;-1:-1:-1;;;;;;6141:16:1;;;6137:106;;6205:11;;-1:-1:-1;;;;;6182:49:1;;;;:35;;:16;;;6199:2;:17;6182:35;:16;:35;:::i;:::-;:49;;;;;;6174:57;;6137:106;5944:306;;;:::o;1149:21::-;;;;:::o;13895:650:0:-;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;13960:14:0;;:::i;:::-;-1:-1:-1;13977:21:0;;;;:12;:21;;;;;;;;;13960:38;;;;;;;;;-1:-1:-1;;;;;13960:38:0;;;;;;-1:-1:-1;13960:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13960:38:0;;;;;;;;;;;;;;;;;;14028:10;14017:21;14009:47;;;;;-1:-1:-1;;;14009:47:0;;;;;;;;;;;;-1:-1:-1;;;14009:47:0;;;;;;;;;;;;;;;14069:20;14087:1;14069:17;:20::i;:::-;14120:13;89:1:4;14136::0;:11;;;:24;:49;;14176:9;;-1:-1:-1;;;;;14176:9:0;14136:49;;;14163:10;;-1:-1:-1;;;;;14163:10:0;14136:49;14120:65;;14196:44;14212:5;14219:1;:4;;;14225:1;:14;;;14196:15;:44::i;:::-;14300:38;;;-1:-1:-1;;;14300:38:0;;14332:4;14300:38;;;;;;-1:-1:-1;;;;;;;14300:23:0;;;-1:-1:-1;;14300:38:0;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;14300:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14300:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14300:38:0;14353:11;;;;14300:38;;-1:-1:-1;89:1:4;14353:24:0;14349:89;;;14379:12;:22;;;14349:89;;;14417:11;:21;;;14349:89;14479:4;;;;;14470:7;;14485:13;;;;;-1:-1:-1;14500:14:0;;;14516:7;;;;;14525:11;;;;14456:81;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14456:81:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5594:1:1;5583:8;:12;-1:-1:-1;;13895:650:0:o;2829:967:1:-;3032:7;;-1:-1:-1;;;;;3032:7:1;3018:10;:21;3010:43;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;;;;3106:1;3092:10;:15;;3084:46;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;;;;3163:1;3149:10;:15;;3141:46;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;;;;3199:14;3215;3249:5;-1:-1:-1;;;;;3234:28:1;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3234:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3234:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3234:30:1;3266;;;-1:-1:-1;;;3266:30:1;;;;-1:-1:-1;;;;;3266:28:1;;;-1:-1:-1;;3266:30:1;;;;;3234;;3266;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;3266:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3266:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3266:30:1;3198:99;;-1:-1:-1;3266:30:1;-1:-1:-1;;;;;;3331:20:1;;;;;;;:45;;;;-1:-1:-1;;;;;;3355:21:1;;;;;;;3331:45;3330:111;;;-1:-1:-1;;;;;;3395:20:1;;;;;;;:45;;;;-1:-1:-1;;;;;;3419:21:1;;;;;;;3395:45;3308:169;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;;;;3490:4;:12;;-1:-1:-1;;;;;3490:12:1;;;-1:-1:-1;;;;;;3490:12:1;;;;;;;3513:9;:22;;;;;;;;;;;;;3546:10;:24;;;;;;;;;;;;;;;3581:9;:22;;;3628:29;;;-1:-1:-1;;;3628:29:1;;;;-1:-1:-1;;;3628:29:1;;;;;;;;;;;;;;3513:22;3628:29;;;5:2:-1;;;;30:1;27;20:12;5:2;3628:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3628:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3628:29:1;3614:43;;:11;:43;-1:-1:-1;;3668:9:1;:22;-1:-1:-1;;3719:2:1;3701:15;:20;-1:-1:-1;;3761:2:1;3744:14;:19;2829:967::o;980:19::-;;;-1:-1:-1;;;;;980:19:1;;:::o;6258:132::-;6360:10;;6353:29;;;-1:-1:-1;;;6353:29:1;;;;6318:12;;-1:-1:-1;;;;;6360:10:1;;-1:-1:-1;;6353:29:1;;;;;;;;;;;;;;6360:10;6353:29;;;5:2:-1;;;;30:1;27;20:12;5:2;6353:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6353:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6353:29:1;6343:39;;;6258:132;-1:-1:-1;6258:132:1:o;14848:1887:0:-;15101:4;;15107:9;;15118:10;;14957:17;;;;;;;;;;15072:57;;-1:-1:-1;;;;;15101:4:0;;;;15107:9;;;;15118:10;15072:28;:57::i;:::-;-1:-1:-1;;;;;15032:97:0;;;;-1:-1:-1;15032:97:0;;-1:-1:-1;15140:13:0;15156:23;15171:7;15156:14;:23::i;:::-;15140:39;;15190:13;15206:47;15244:8;15206:37;:47::i;:::-;15301:17;;-1:-1:-1;15190:63:0;-1:-1:-1;15321:13:0;15301:17;;15400:21;15190:63;15301:17;15400:8;:21::i;:::-;15372:49;;;;15432:1018;15439:10;;15432:1018;;15541:18;15646:130;15685:8;15695:12;15709:11;15722:12;15736:5;15764:11;;15646:38;:130::i;:::-;15574:202;;-1:-1:-1;15574:202:0;-1:-1:-1;15574:202:0;;-1:-1:-1;;;15795:18:0;15791:64;;15834:5;;;15791:64;15947:20;15969:21;15992:17;16013:145;16073:8;16083:13;16098:5;16105:11;;16118:15;;16135:14;;16151:6;16013:41;:145::i;:::-;15946:212;;-1:-1:-1;15946:212:0;-1:-1:-1;15946:212:0;-1:-1:-1;16189:34:0;15946:212;;16189:34;:20;:34;:::i;:::-;16173:50;;;;16253:33;:12;16270:15;16253:33;:16;:33;:::i;:::-;16238:48;;16324:13;16305:15;:32;16301:78;;;16358:5;;;;;;16301:78;16413:25;16422:8;16432:5;16413:8;:25::i;:::-;16395:43;;-1:-1:-1;16395:43:0;-1:-1:-1;15432:1018:0;;-1:-1:-1;;;;15432:1018:0;;16466:16;;16462:266;;89:1:4;16515:8:0;:21;:201;;16646:70;16676:12;16690:11;16703:12;16646:29;:70::i;:::-;16515:201;;;16556:70;16586:12;16600;16614:11;16556:29;:70::i;:::-;16499:217;;;;16462:266;14848:1887;;;;;;;;;;;;:::o;932:22:1:-;;;-1:-1:-1;;;;;932:22:1;;:::o;1297:24::-;;;-1:-1:-1;;;;;1297:24:1;;:::o;15599:914::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15727:7;;15701:34;;-1:-1:-1;;;;;15727:7:1;15701:25;:34::i;:::-;-1:-1:-1;;;;;15687:48:1;:10;:48;15679:70;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;15764:19:1;;15760:179;;15821:21;15861:17;;15857:49;;15880:26;;-1:-1:-1;;;;;15880:11:1;;;:26;;;;;;;;;;;;:11;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15880:26:1;15857:49;15921:7;;;15760:179;15966:38;;;-1:-1:-1;;;15966:38:1;;15998:4;15966:38;;;;;;-1:-1:-1;;;;;;;15966:23:1;;;-1:-1:-1;;15966:38:1;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;15966:38:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15966:38:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15966:38:1;16067:9;;15966:38;;-1:-1:-1;15966:38:1;;-1:-1:-1;;;;;16058:18:1;;;16067:9;;16058:18;16054:377;;;16093:17;16113:28;133:1:4;16113:16:1;:28::i;:::-;16093:48;;16182:12;16172:7;:22;:51;;16222:1;16172:51;;;16207:12;16197:7;:22;16172:51;16156:67;;16054:377;;;;16263:10;;-1:-1:-1;;;;;16254:19:1;;;16263:10;;16254:19;16250:181;;;16290:17;16310:27;89:1:4;16310:16:1;:27::i;:::-;16290:47;;16378:12;16368:7;:22;:51;;16418:1;16368:51;;;16403:12;16393:7;:22;16368:51;16352:67;;16250:181;;16447:17;;16443:62;;16466:39;16480:5;16487:2;16491:13;16466;:39::i;:::-;5571:1;;;-1:-1:-1;;5594:1:1;5583:8;:12;15599:914::o;1245:23::-;;;;:::o;14023:350::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14136:7;;14110:34;;-1:-1:-1;;;;;14136:7:1;14110:25;:34::i;:::-;-1:-1:-1;;;;;14096:48:1;:10;:48;14092:180;;14168:22;89:1:4;14168:11:1;:22::i;:::-;:27;:59;;;;;14199:23;133:1:4;14199:11:1;:23::i;:::-;:28;14168:59;14160:100;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;;;;14306:1;14290:12;:17;;14282:48;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;;;;14341:9;:24;5594:1;5583:8;:12;14023:350::o;10845:691::-;10954:20;10976:21;11010:16;11029:22;11041:9;11029:11;:22::i;:::-;11010:41;;11091:7;11077:21;;:11;:21;:45;;11111:11;11077:45;;;11101:7;11077:45;;;11062:60;;11153:11;11142:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11142:23:1;;11133:32;;11197:11;11186:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11186:23:1;;11176:33;;11220:13;11236:23;11246:9;11257:1;11236:9;:23::i;:::-;11220:39;-1:-1:-1;11270:12:1;11297:232;11303:13;;;;;:36;;;11328:11;11320:5;:19;;;11303:36;11297:232;;;11371:8;11355:6;11362:5;11355:13;;;;;;;;;;;;;;;:24;;;;;11411:28;11419:9;11430:8;11411:7;:28::i;:::-;11394:7;11402:5;11394:14;;;;;;;;;;;;;;;:45;;;;;11465:30;11475:9;11486:8;11465:9;:30::i;:::-;11454:41;-1:-1:-1;11510:7:1;;11297:232;;16743:1917:0;16996:4;;17002:9;;17013:10;;16853:16;;;;;;;;;;16967:57;;-1:-1:-1;;;;;16996:4:0;;;;17002:9;;;;17013:10;16967:28;:57::i;:::-;-1:-1:-1;;;;;16927:97:0;;;;-1:-1:-1;16927:97:0;;-1:-1:-1;17035:13:0;17051:24;17066:8;17051:14;:24::i;:::-;17035:40;;17123:13;17139:47;17177:8;17139:37;:47::i;:::-;17197:18;;-1:-1:-1;17123:63:0;-1:-1:-1;17218:14:0;17197:18;;17297:21;17306:8;17197:18;17297:8;:21::i;:::-;17269:49;;;;17329:1046;17336:10;;17329:1046;;17438:18;17539:140;17591:8;17601:13;17616:11;17629:12;17660:5;17667:11;;17539:51;:140::i;:::-;17471:208;;-1:-1:-1;17471:208:0;-1:-1:-1;17471:208:0;;-1:-1:-1;;;17698:18:0;17694:64;;17737:5;;;17694:64;17851:20;17873:21;17896:17;17917:157;17972:8;17999:13;18014:5;18021:11;;18034:15;;18051:14;;18067:6;17917:40;:157::i;:::-;17850:224;;-1:-1:-1;17850:224:0;-1:-1:-1;17850:224:0;-1:-1:-1;18104:22:0;17850:224;18124:1;18104:22;:19;:22;:::i;:::-;18089:37;;;;18157:53;18175:34;:16;18196:12;18175:34;:20;:34;:::i;:::-;18157:13;;:53;:17;:53;:::i;:::-;18141:69;;18249:13;18229:16;:33;18225:79;;;18283:5;;;;;;18225:79;18338:25;18347:8;18357:5;18338:8;:25::i;:::-;18320:43;;-1:-1:-1;18320:43:0;-1:-1:-1;17329:1046:0;;-1:-1:-1;;;;17329:1046:0;;18391:17;;18387:266;;89:1:4;18440:8:0;:21;:201;;18571:70;18600:13;18615:11;18628:12;18571:28;:70::i;18440:201::-;18481:70;18510:13;18525:12;18539:11;18481:28;:70::i;12889:998::-;13023:12;5513:8:1;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;13056:9:0;;;;;:37;;;13078:9;;13070:5;:17;;;;;;13069:24;13056:37;13048:63;;;;;-1:-1:-1;;;13048:63:0;;;;;;;;;;;;-1:-1:-1;;;13048:63:0;;;;;;;;;;;;;;;13188:7;;-1:-1:-1;;;;;13188:7:0;13130:54;13188:7;13130:45;:54::i;:::-;-1:-1:-1;;;;;13130:65:0;;13122:112;;;;;-1:-1:-1;;;13122:112:0;;;;;;;;;;;;-1:-1:-1;;;13122:112:0;;;;;;;;;;;;;;;13310:12;13325:17;:15;:17::i;:::-;13310:32;;13353:16;13382:11;;13372:7;:21;:49;;13420:1;13372:49;;;13406:11;;13396:7;:21;13372:49;13353:68;;13455:9;;13440:11;:24;;13432:51;;;;;-1:-1:-1;;;13432:51:0;;;;;;;;;;;;-1:-1:-1;;;13432:51:0;;;;;;;;;;;;;;;13511:4;;13496:31;;;-1:-1:-1;;;13496:31:0;;-1:-1:-1;;;;;13496:31:0;;;;;;;;;13511:4;;;;;-1:-1:-1;;13496:31:0;;;;;-1:-1:-1;;13496:31:0;;;;;;;-1:-1:-1;13511:4:0;13496:31;;;5:2:-1;;;;30:1;27;20:12;5:2;13496:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13496:31:0;;;;13538:17;13558:38;13573:11;13586:5;13593:2;13558:14;:38::i;:::-;13538:58;-1:-1:-1;13611:17:0;;13607:218;;13655:70;13670:4;13676:2;13680:11;13693:12;13707:5;133:1:4;13655:14:0;:70::i;:::-;13745:68;;;;;;;;;;;;;;;;;;;133:1:4;13745:68:0;;;;;;-1:-1:-1;;;13645:80:0;;-1:-1:-1;;;;;;13745:68:0;;;;;;;;;;;-1:-1:-1;;;;;;;13745:68:0;;;;;;;;;13607:218;13863:16;:14;:16::i;:::-;-1:-1:-1;;5594:1:1;5583:8;:12;-1:-1:-1;12889:998:0;;-1:-1:-1;;;12889:998:0:o;14407:350:1:-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14520:7;;14494:34;;-1:-1:-1;;;;;14520:7:1;14494:25;:34::i;:::-;-1:-1:-1;;;;;14480:48:1;:10;:48;14476:180;;14552:22;89:1:4;14552:11:1;:22::i;:::-;:27;:59;;;;;14583:23;133:1:4;14583:11:1;:23::i;:::-;:28;14552:59;14544:100;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;;;;14690:1;14674:12;:17;;14666:48;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;;;;14725:9;:24;5594:1;5583:8;:12;14407:350::o;1464:24::-;;;;:::o;1717:26::-;;;;:::o;2899:496:13:-;2994:16;;-1:-1:-1;;;;;3049:16:13;;;;;;;;3041:48;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;;;;3100:14;-1:-1:-1;;;;;3117:15:13;;;;;;;:33;;3144:6;3117:33;;;3135:6;3117:33;3100:50;-1:-1:-1;;;;;;3169:20:13;;3161:45;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;;;;3218:16;3236;3272:4;-1:-1:-1;;;;;3257:32:13;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3257:34:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3257:34:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3257:34:13;;;;;;;;;-1:-1:-1;3257:34:13;-1:-1:-1;;;;;;3325:16:13;;;;;;;:62;;3368:8;3378;3325:62;;;3345:8;3355;3325:62;3302:85;;;;-1:-1:-1;2899:496:13;-1:-1:-1;;;;;;;2899:496:13:o;6398:172:1:-;6516:10;;6477:14;;-1:-1:-1;;;;;6516:21:1;;;:10;;:21;:46;;133:1:4;6516:46:1;;;89:1:4;6516:46:1;6504:58;6398:172;-1:-1:-1;;6398:172:1:o;409:268:13:-;478:13;520:9;355:1;507:22;503:167;;;-1:-1:-1;399:1:13;503:167;;;612:9;399:1;598:23;594:76;;;-1:-1:-1;355:1:13;594:76;409:268;;;:::o;13503:220:1:-;13604:9;13615:11;13646:25;13656:9;13667:3;13646:9;:25::i;:::-;13639:32;;13691:24;13699:9;13710:4;13691:7;:24::i;:::-;13682:33;;13503:220;;;;;:::o;6842:1738:13:-;7060:17;7079:15;7096:16;7114:19;7135:20;355:1;7172:9;:22;7168:1405;;;7211:13;7227:64;7249:11;7262:12;7276:5;7283:7;7227:21;:64::i;:::-;7211:80;-1:-1:-1;7306:13:13;7322:22;:12;7339:4;7322:22;:16;:22;:::i;:::-;7306:38;;7384:8;7373;:19;:57;;7429:1;7373:57;;;7395:31;7396:19;;;7421:4;7395:31;:25;:31;:::i;:::-;7359:71;;7473:8;7459:11;:22;:47;;7495:11;7459:47;;;7484:8;7459:47;7445:61;-1:-1:-1;7534:16:13;;:75;;7557:52;7570:11;7583:12;7597:11;7557:12;:52::i;:::-;7534:75;;;7553:1;7534:75;7731:22;;;;-1:-1:-1;7521:88:13;-1:-1:-1;;;7755:24:13;;;;-1:-1:-1;;7781:26:13;;;7168:1405;;;399:1;7839:9;:23;7835:738;;;7879:13;7895:66;7919:11;7932:12;7946:5;7953:7;7895:23;:66::i;:::-;7879:82;-1:-1:-1;7976:13:13;7992:21;:11;8008:4;7992:21;:15;:21;:::i;:::-;7976:37;;8052:8;8041;:19;:57;;8097:1;8041:57;;;8063:31;8064:19;;;8089:4;8063:31;:25;:31;:::i;:::-;8028:70;;8139:8;8126:10;:21;:45;;8161:10;8126:45;;;8150:8;8126:45;8113:58;-1:-1:-1;8200:15:13;;:73;;8222:51;8235:10;8247:11;8260:12;8222;:51::i;:::-;8200:73;;;8218:1;8200:73;8356:21;;;;-1:-1:-1;8186:87:13;-1:-1:-1;;;8379:24:13;;;;-1:-1:-1;;8405:26:13;;;7835:738;;;-1:-1:-1;8525:8:13;;-1:-1:-1;8535:11:13;;-1:-1:-1;8548:12:13;7835:738;6842:1738;;;;;;;;;;;;:::o;2849:985:0:-;3114:13;3129:28;3159:25;3186:21;3220;3252:17;3357:63;3375:9;3386:13;3401:5;3408:11;3357:17;:63::i;:::-;3280:140;;-1:-1:-1;3280:140:0;-1:-1:-1;3280:140:0;;-1:-1:-1;3280:140:0;-1:-1:-1;3280:140:0;-1:-1:-1;3441:36:0;3280:140;3468:8;3441:17;:36::i;:::-;3431:46;;3499:41;3520:8;3530:9;3499:20;:41::i;:::-;3488:52;-1:-1:-1;3577:34:0;:16;3598:12;3577:34;:20;:34;:::i;:::-;3551:60;;3697:16;89:1:4;3716:9:0;:22;:47;;3753:10;;-1:-1:-1;;;;;3753:10:0;3716:47;;;3741:9;;-1:-1:-1;;;;;3741:9:0;3716:47;3697:66;;3774:52;3788:8;3798:2;3802:23;3774:13;:52::i;:::-;2849:985;;;;;;;;;;;;;;;:::o;296:129:14:-;380:5;;;375:16;;;;367:50;;;;;-1:-1:-1;;;367:50:14;;;;;;;;;;;;-1:-1:-1;;;367:50:14;;;;;;;;;;;;;;13731:222:1;13833:9;13844:11;13875:26;13886:9;13897:3;13875:10;:26::i;4092:179::-;4159:9;;4152:42;;;-1:-1:-1;;;4152:42:1;;4188:4;4152:42;;;;;;-1:-1:-1;;;;;4159:9:1;;;;-1:-1:-1;;4152:42:1;;;;;;;;;;;;;;;4159:9;4152:42;;;5:2:-1;;;;30:1;27;20:12;5:2;4152:42:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4152:42:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4152:42:1;4138:11;:56;4227:10;;4220:43;;;-1:-1:-1;;;4220:43:1;;4257:4;4220:43;;;;;;-1:-1:-1;;;;;4227:10:1;;;;-1:-1:-1;;4220:43:1;;;;;4152:42;;4220:43;;;;;;;;4227:10;4220:43;;;5:2:-1;;;;30:1;27;20:12;5:2;4220:43:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4220:43:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4220:43:1;4205:12;:58;4092:179::o;1803:481:13:-;1896:14;1942:1;1931:8;:12;1923:50;;;;;-1:-1:-1;;;1923:50:13;;;;;;;;;;;;-1:-1:-1;;;1923:50:13;;;;;;;;;;;;;;;2004:1;1992:9;:13;:31;;;;;2022:1;2009:10;:14;1992:31;1984:66;;;;;-1:-1:-1;;;1984:66:13;;;;;;;;;;;;-1:-1:-1;;;1984:66:13;;;;;;;;;;;;;;;2061:20;2084:17;:8;2097:3;2084:17;:12;:17;:::i;:::-;2061:40;-1:-1:-1;2112:14:13;2129:31;2061:40;2149:10;2129:31;:19;:31;:::i;:::-;2112:48;-1:-1:-1;2171:16:13;2190:40;2214:15;2190:19;:9;2204:4;2190:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;2171:59;;2265:11;2253:9;:23;;;;;;;1803:481;-1:-1:-1;;;;;;;1803:481:13:o;685:166::-;743:13;812:7;-1:-1:-1;;;;;794:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;794:40:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;794:40:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;794:40:13;776:67;;;-1:-1:-1;;;776:67:13;;;;-1:-1:-1;;;;;776:65:13;;;;;;:67;;;;;794:40;;776:67;;;;;;;;:65;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;776:67:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;776:67:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;776:67:13;;685:166;-1:-1:-1;;685:166:13:o;2779:231:4:-;2935:9;2964:33;;;:22;:33;;;;;;;;:38;;;;;;;;;;2779:231::o;10051:385:1:-;10153:12;10205:31;;;:20;:31;;;;;;;;:38;;;;;;;;;10245:30;;;:19;:30;;;;;:37;;;;;;;;;10205:38;10294:135;10315:4;10313:1;:6;10294:135;;;10351:53;10364:29;;;;;;;;;;;:36;;;;;;;;:39;;;;;;;;;10351:53;;:12;:53;;;;;:66;;;10340:77;;;;;10321:3;;10294:135;;;;10051:385;;;;;;:::o;859:210:13:-;937:18;1016:7;-1:-1:-1;;;;;998:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;998:40:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;998:40:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;998:40:13;980:81;;;-1:-1:-1;;;980:81:13;;;;-1:-1:-1;;;;;980:79:13;;;;-1:-1:-1;;980:81:13;;;;;998:40;;980:81;;;;;;;;:79;:81;;;5:2:-1;;;;30:1;27;20:12;3947:137:1;4040:10;;4033:43;;;-1:-1:-1;;;4033:43:1;;4070:4;4033:43;;;;;;-1:-1:-1;;;;;;;4040:10:1;;-1:-1:-1;;4033:43:1;;;;;;;;;;;;;;4040:10;4033:43;;;5:2:-1;;;;30:1;27;20:12;5:2;4033:43:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4033:43:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4033:43:1;;3947:137;-1:-1:-1;3947:137:1:o;1153:221:13:-;1283:14;1322:44;1348:2;:17;;;1322:21;:10;1337:5;1322:21;:14;:21;:::i;:::-;:25;:44;:25;:44;:::i;:::-;1310:56;1153:221;-1:-1:-1;;;;1153:221:13:o;4950:3221:0:-;5129:13;;;5140:1;5129:13;;;;;;;;;5076:15;;5104:22;;5129:13;;;;17:15:-1;;105:10;5129:13:0;88:34:-1;-1:-1;;5273:4:0;;5279:9;;5290:10;;5104:38;;-1:-1:-1;5244:57:0;;-1:-1:-1;;;;;5273:4:0;;;;-1:-1:-1;5279:9:0;;;;5290:10;5244:28;:57::i;:::-;5216:11;;-1:-1:-1;;;;;5215:86:0;;;;;;;;;5216:8;;5225:1;;5216:11;;;;;;;;;5229:8;5238:1;5229:11;;;;;;;;;;;;;5215:86;;;;;;;;;;5342:8;5351:1;5342:11;;;;;;;;;;;;;;5355:8;5364:1;5355:11;;;;;;;;;;;;;;5313:8;5322:1;5313:11;;;;;;;;;;;;;5326:8;5335:1;5326:11;;;;;;;;;;;;;5312:55;;;;;;;;;;5378:20;5415:1;5401:8;5410:1;5401:11;;;;;;;;;;;;;;:15;:34;;;;;5434:1;5420:8;5429:1;5420:11;;;;;;;;;;;;;;:15;5401:34;5378:57;;5446:18;5475:19;5505:23;5552:11;5539:24;;5576:10;5589:24;133:1:4;5611::0;5589:9;:24::i;:::-;5576:37;;5624:1452;5631:10;;;;;:34;;;5654:11;5645:5;:20;;5631:34;5624:1452;;;5703:10;5784:455;;;;5920:132;89:1:4;5970:10:0;6007:8;6016:1;6007:11;;;;;;;;;;;;;;6020:8;6029:1;6020:11;;;;;;;;;;;;;;6033:5;6040:11;;5920:38;:132::i;:::-;5871:8;5880:1;5871:11;;;;;;;;;;;;;5884:8;5893:1;5884:11;;;;;;;;;;;;;;;;;5824:228;;;;;;;-1:-1:-1;5824:228:0;-1:-1:-1;5824:228:0;-1:-1:-1;6075:18:0;6071:153;;6131:1;6118:14;;6199:5;;;6071:153;6255:11;6269:26;133:1:4;6289:5:0;6269:7;:26::i;:::-;6255:40;;6359:20;6394:21;6430:17;6462:25;6502:21;6527:58;89:1:4;6556:13:0;6571:5;6578:6;6527:17;:58::i;:::-;6358:227;;-1:-1:-1;6358:227:0;;-1:-1:-1;6358:227:0;-1:-1:-1;6358:227:0;-1:-1:-1;6358:227:0;-1:-1:-1;6622:34:0;6358:227;;6622:34;:20;:34;:::i;:::-;6686:10;;6600:56;;;6671:45;;-1:-1:-1;;;;;6686:10:0;6698:8;6708:7;6671:14;:45::i;:::-;6756:13;6737:15;:32;6733:278;;;6840:1;6827:14;;6905:5;;;;;;;;;6733:278;6964:31;:10;6979:15;6964:31;:14;:31;:::i;:::-;6951:44;;7035:29;133:1:4;7058:5:0;7035:10;:29::i;:::-;7027:37;;5624:1452;;;;;;;;;;7153:22;;7149:105;;7208:9;;7192:50;;-1:-1:-1;;;;;7208:9:0;7219:2;7223:18;7192:15;:50::i;:::-;7359:15;:33;;;;;7391:1;7378:10;:14;7359:33;:57;;;;;7405:11;7396:5;:20;;7359:57;7355:313;;;7522:134;89:1:4;7572:10:0;7605:8;7614:1;7605:11;;;;;;;;;;;;;;7618:8;7627:1;7618:11;;;;;;;;;;;;;;7631;7644;;7522:38;:134::i;:::-;7477:8;7486:1;7477:11;;;;;;;;;;;;;7490:8;7499:1;7490:11;;;;;;;;;;;;;;;;;7433:223;;;;;;;-1:-1:-1;7433:223:0;-1:-1:-1;7433:223:0;-1:-1:-1;7355:313:0;7684:18;;7680:484;;7723:14;;7719:256;;7811:148;7855:10;7867:14;7883:8;7892:1;7883:11;;;;;;;;;;;;;;7896:8;7905:1;7896:11;;;;;;;;;;;;;;7934;7947;;7811:43;:148::i;:::-;-1:-1:-1;7758:201:0;;-1:-1:-1;7758:201:0;-1:-1:-1;7719:256:0;8009:10;;8021:9;;7991:71;;8005:2;;-1:-1:-1;;;;;8009:10:0;;;;8021:9;8032:14;8048:13;7991;:71::i;:::-;8085:15;;;:44;;;8118:11;8104:10;:8;:10::i;:::-;:25;;8085:44;8077:75;;;;;-1:-1:-1;;;8077:75:0;;;;;;;;;;;;-1:-1:-1;;;8077:75:0;;;;;;;;;;;;;;;4950:3221;;;;;;;;;;;:::o;6603:893:1:-;-1:-1:-1;;;;;6854:16:1;;6801:12;6854:16;;;:10;:16;;;;;;;;6826:44;;;;;;;;;;;;;;;;;:25;;:44;;6854:16;6826:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:4;6889:11;:18;:25;6881:62;;;;;-1:-1:-1;;;6881:62:1;;;;;;;;;;;;-1:-1:-1;;;6881:62:1;;;;;;;;;;;;;;;6972:18;;7003;;:::i;:::-;7024:197;;;;;;;;-1:-1:-1;;;;;7024:197:1;;;;;;;;;;;;;;7081:18;:16;:18::i;:::-;7024:197;;;;7114:6;7024:197;;;;7135:12;7024:197;;;;7162:13;7024:197;;;;7190:5;7024:197;;;;7210:10;7024:197;;;7003:218;;7232:10;:16;7243:4;-1:-1:-1;;;;;7232:16:1;-1:-1:-1;;;;;7232:16:1;;;;;;;;;;;;7254:5;:13;;;7232:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;7232:36:1;;;;;;;;;;;;;;;;;;;;;;7311:5;7281:12;:27;7294:5;:13;;;7281:27;;;;;;;;;;;:35;;;;;;;;;;;;;-1:-1:-1;;;;;7281:35:1;;;;;-1:-1:-1;;;;;7281:35:1;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7281:35:1;;;;;-1:-1:-1;;;;;7281:35:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7331:21;7338:5;7345:6;7331;:21::i;:::-;7327:82;;7374:23;7383:5;7390:6;7374:8;:23::i;:::-;7421:34;7426:5;7433:6;7441:5;:13;;;7421:4;:34::i;:::-;7475:13;;;;6603:893;-1:-1:-1;;;;;;;;;6603:893:1:o;433:142:14:-;485:6;512;;;:30;;-1:-1:-1;;527:5:14;;;541:1;536;527:5;536:1;522:15;;;;;:20;512:30;504:63;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;;;8548:958:1;8645:48;8649:5;:15;;;8666:5;:11;;;8679:5;:13;;;8645:3;:48::i;:::-;8754:13;;;;;8741:27;;;;:12;:27;;;;;;;8734:34;;-1:-1:-1;;;;;;8734:34:1;;;;;-1:-1:-1;8734:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8843:11;;-1:-1:-1;;;;;8832:23:1;;;:10;:23;;;:30;8897:16;;;;8881:32;;8873:63;;;;;-1:-1:-1;;;8873:63:1;;;;;;;;;;;;-1:-1:-1;;;8873:63:1;;;;;;;;;;;;;;;9051:11;;-1:-1:-1;;;;;9040:23:1;9019:18;9040:23;;;:10;:23;;;;;:42;;-1:-1:-1;;9064:17:1;;;9040:42;;;;;;;;;;;;;;;;;;;9104:11;;-1:-1:-1;;;;;9093:23:1;;;:10;:23;;;;;;;9117:16;;;;9093:41;;9040:42;;-1:-1:-1;9040:42:1;;9093:41;;;;;;;;;;;;;;;;;;:57;;;;9240:16;;;;9199:27;;;:12;:27;;;;;;:38;;:57;;;;9333:11;;-1:-1:-1;;;;;9322:23:1;;;:10;:23;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;9392:36;9399:5;:15;;;9416:5;:11;;;9392:6;:36::i;:::-;9388:111;;9449:38;9458:5;:15;;;9475:5;:11;;;9449:8;:38::i;:::-;8548:958;;;:::o;5083:355::-;5201:7;;5183:33;;;-1:-1:-1;;;5183:33:1;;;;5168:12;;-1:-1:-1;;;;;5201:7:1;;5183:31;;:33;;;;;;;;;;;;;;5201:7;5183:33;;;5:2:-1;;;;30:1;27;20:12;5:2;5183:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5183:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5183:33:1;;-1:-1:-1;;;;;;5231:13:1;;;;;;;5227:204;;;5261:28;;;-1:-1:-1;;;5261:28:1;;;;;;;;;;-1:-1:-1;;;;;5261:20:1;;;;;:28;;;;;-1:-1:-1;;5261:28:1;;;;;;;-1:-1:-1;5261:20:1;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;5261:28:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5261:28:1;;;;5304:42;5335:2;5339:6;5304:30;:42::i;:::-;5227:204;;;5387:32;5401:5;5408:2;5412:6;5387:13;:32::i;:::-;5083:355;;;;:::o;10815:2374:13:-;11063:17;11082:21;11105:17;11135:8;355:1;11158:8;:21;11154:1895;;;11307:14;11324:66;11360:13;11375:5;11382:7;11324:35;:66::i;:::-;11307:83;-1:-1:-1;11433:38:13;:11;11449:5;:21;;;11433:38;:15;:38;:::i;:::-;11409:20;:9;11423:5;11409:20;:13;:20;:::i;:::-;:62;11405:662;;11545:13;;-1:-1:-1;11583:41:13;11618:5;11583:30;:9;11597:15;11583:30;:13;:30;:::i;:41::-;11577:47;;11674:3;11662:9;:15;11643:34;;11405:662;;;11743:49;11786:5;11743:38;:11;11759:21;;;11743:38;:15;:38;:::i;:49::-;11731:61;;11884:62;11920:9;11931:5;11938:7;11884:35;:62::i;:::-;11869:77;-1:-1:-1;11984:11:13;;-1:-1:-1;12020:31:13;11984:11;12041:9;12020:31;:20;:31;:::i;:::-;12014:37;;11405:662;11154:1895;;;;399:1;12097:8;:22;12093:956;;;12281:14;12298:66;12334:13;12349:5;12356:7;12298:35;:66::i;:::-;12281:83;-1:-1:-1;12407:38:13;:11;12423:5;:21;;;12407:38;:15;:38;:::i;:::-;12383:20;:9;12397:5;12383:20;:13;:20;:::i;:::-;:62;12379:659;;12519:13;;-1:-1:-1;12557:41:13;12592:5;12557:30;:9;12571:15;12557:30;:13;:30;:::i;:41::-;12551:47;;12648:3;12636:9;:15;12617:34;;12379:659;;;12717:49;12760:5;12717:38;:11;12733:21;;;12717:38;:15;:38;:::i;:49::-;12705:61;;12858:62;12894:9;12905:5;12912:7;12858:35;:62::i;:::-;12843:77;;12958:11;12939:30;;13013:9;12994:16;:28;12988:34;;12379:659;12093:956;;13129:52;13177:3;13130:41;13147:23;:3;13155:14;13147:23;:7;:23;:::i;:::-;13130:12;:3;13138;13130:12;:7;:12;:::i;:::-;:16;:41;:16;:41;:::i;13129:52::-;13114:67;;10815:2374;;;;;;;;;;;;:::o;10465:307:1:-;10545:11;10574:13;10590:23;10600:9;10611:1;10590:9;:23::i;:::-;10574:39;;10624:141;10630:13;;10624:141;;10669:28;10677:9;10688:8;10669:7;:28::i;:::-;10659:38;;;;10723:30;10733:9;10744:8;10723:9;:30::i;:::-;10712:41;;10624:141;;;10465:307;;;;:::o;4279:291::-;789:34;;;;;;;;;;;-1:-1:-1;;;789:34:1;;;;;4413:52;;-1:-1:-1;;;;;4413:52:1;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4413:52:1;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;4402:64:1;;;;-1:-1:-1;;4381:17:1;;4402:10;;;4413:52;4402:64;;;25:18:-1;4402:64:1;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4402:64:1;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;4366:100:1;;;;4485:7;:57;;;;-1:-1:-1;4497:11:1;;:16;;:44;;;4528:4;4517:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4517:24:1;4497:44;4477:85;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;;;;4279:291;;;;;:::o;556:183:4:-;641:21;694:37;;;:26;:37;;;;;;;556:183::o;8740:1933:13:-;8972:18;8992:15;9009:16;9027:19;9048:20;355:1;9085:9;:22;9081:1585;;;9124:13;9140:64;9162:11;9175:12;9189:5;9196:7;9140:21;:64::i;:::-;9124:80;-1:-1:-1;9219:13:13;9235:22;:12;9252:4;9235:22;:16;:22;:::i;:::-;9219:38;;9297:8;9286;:19;:57;;9342:1;9286:57;;;9308:31;9309:19;;;9334:4;9308:31;:25;:31;:::i;:::-;9272:71;-1:-1:-1;9371:16:13;;:75;;9394:52;9407:11;9420:12;9434:11;9394:12;:52::i;:::-;9371:75;;;9390:1;9371:75;9358:88;;9478:9;9465:10;:22;9461:168;;;9521:9;9508:22;;9563:50;9575:10;9587:12;9601:11;9563;:50::i;:::-;9549:64;;9461:168;-1:-1:-1;;;9712:22:13;;;;-1:-1:-1;;9736:24:13;;;9762:26;;;9081:1585;;;399:1;9820:9;:23;9816:850;;;9860:13;9876:66;9900:11;9913:12;9927:5;9934:7;9876:23;:66::i;:::-;9860:82;-1:-1:-1;9957:13:13;9973:21;:11;9989:4;9973:21;:15;:21;:::i;:::-;9957:37;;10033:8;10022;:19;:57;;10078:1;10022:57;;;10044:31;10045:19;;;10070:4;10044:31;:25;:31;:::i;:::-;10009:70;-1:-1:-1;10108:15:13;;:73;;10130:51;10143:10;10155:11;10168:12;10130;:51::i;:::-;10108:73;;;10126:1;10108:73;10094:87;;10214:9;10200:11;:23;10196:170;;;10258:9;10244:23;;10299:51;10311:11;10324;10337:12;10299:11;:51::i;:::-;10286:64;;10196:170;-1:-1:-1;;;10445:23:13;;;;-1:-1:-1;;10470:24:13;;;10496:26;;;9816:850;;13257:2563;13506:13;;;;13705:43;13742:5;13705:32;:11;13721:15;13705:32;:15;:32;:::i;:43::-;13675:73;-1:-1:-1;13759:26:13;13788:51;13835:3;13788:42;13675:73;13815:14;13788:42;:26;:42;:::i;:51::-;13759:80;-1:-1:-1;13850:30:13;13883:66;13899:49;:22;13759:80;13899:49;:26;:49;:::i;13883:66::-;13850:99;;13960:24;14028:15;13999:25;:44;13995:1417;;14106:11;;-1:-1:-1;14147:47:13;14106:11;14168:25;14147:47;:20;:47;:::i;:::-;14132:62;-1:-1:-1;14231:52:13;:25;14261:21;14231:52;:29;:52;:::i;:::-;14209:74;;13995:1417;;;14353:15;14325:43;;14653:86;14724:14;14706:15;:32;14696:7;:42;14653:38;14683:7;14653:25;:29;;:38;;;;:::i;:86::-;14634:105;-1:-1:-1;15194:129:13;15290:32;;;15280:7;:42;15194:63;15233:5;:23;;;15194:34;:25;15224:3;15194:34;:29;:34;:::i;:::-;:38;:63;:38;:63;:::i;:129::-;15172:151;-1:-1:-1;15353:47:13;:16;15374:25;15353:47;:20;:47;:::i;:::-;15338:62;;13995:1417;355:1;15428:8;:21;15424:389;;;15477:72;15513:19;15534:5;15541:7;15477:35;:72::i;:::-;15466:83;;15424:389;;;399:1;15679:8;:22;15675:138;;;15729:72;15765:19;15786:5;15793:7;15729:35;:72::i;:::-;15718:83;;15675:138;13257:2563;;;;;;;;;;;;;;;:::o;160:128:14:-;244:5;;;239:16;;;;231:49;;;;;-1:-1:-1;;;231:49:14;;;;;;;;;;;;-1:-1:-1;;;231:49:14;;;;;;;;;;;;;;2405:436:13;2498:13;2544:1;2532:9;:13;2524:52;;;;;-1:-1:-1;;;2524:52:13;;;;;;;;;;;;-1:-1:-1;;;2524:52:13;;;;;;;;;;;;;;;2607:1;2595:9;:13;:31;;;;;2625:1;2612:10;:14;2595:31;2587:66;;;;;-1:-1:-1;;;2587:66:13;;;;;;;;;;;;-1:-1:-1;;;2587:66:13;;;;;;;;;;;;;;;2664:14;2681:34;2710:4;2681:24;:9;2695;2681:24;:13;:24;:::i;:34::-;2664:51;-1:-1:-1;2726:16:13;2745:34;2775:3;2745:25;:10;2760:9;2745:25;:14;:25;:::i;:34::-;2726:53;;2801:32;2831:1;2814:11;2802:9;:23;;;;;;;2801:32;:29;:32;:::i;:::-;2790:43;2405:436;-1:-1:-1;;;;;;2405:436:13:o;3804:135:1:-;3896:9;;3889:42;;;-1:-1:-1;;;3889:42:1;;3925:4;3889:42;;;;;;-1:-1:-1;;;;;;;3896:9:1;;-1:-1:-1;;3889:42:1;;;;;;;;;;;;;;3896:9;3889:42;;;5:2:-1;;;;30:1;27;20:12;8424:3225:0;8605:13;;;8616:1;8605:13;;;;;;;;;8552:15;;8580:22;;8605:13;;;;17:15:-1;;105:10;8605:13:0;88:34:-1;-1:-1;;8749:4:0;;8755:9;;8766:10;;8580:38;;-1:-1:-1;8720:57:0;;-1:-1:-1;;;;;8749:4:0;;;;-1:-1:-1;8755:9:0;;;;8766:10;8720:28;:57::i;:::-;8692:11;;-1:-1:-1;;;;;8691:86:0;;;;;;;;;8692:8;;8701:1;;8692:11;;;;;;;;;8705:8;8714:1;8705:11;;;;;;;;;;;;;8691:86;;;;;;;;;;8818:8;8827:1;8818:11;;;;;;;;;;;;;;8831:8;8840:1;8831:11;;;;;;;;;;;;;;8789:8;8798:1;8789:11;;;;;;;;;;;;;8802:8;8811:1;8802:11;;;;;;;;;;;;;8788:55;;;;;;;;;;8867:11;8854:24;;8889:20;8926:1;8912:8;8921:1;8912:11;;;;;;;;;;;;;;:15;:34;;;;;8945:1;8931:8;8940:1;8931:11;;;;;;;;;;;;;;:15;8912:34;8889:57;;8957:18;8986:19;9016:23;9052:10;9065:23;89:1:4;9086::0;9065:9;:23::i;:::-;9052:36;;9099:1451;9106:10;;;;;:34;;;9129:11;9120:5;:20;;9106:34;9099:1451;;;9178:10;9259:457;;;;9395:133;133:1:4;9446:10:0;9483:8;9492:1;9483:11;;;;;;;9395:133;9346:8;9355:1;9346:11;;;;;;;;;;;;;9359:8;9368:1;9359:11;;;;;;;;;;;;;;;;;9299:229;;;;;;;-1:-1:-1;9299:229:0;-1:-1:-1;9299:229:0;-1:-1:-1;9551:18:0;9547:154;;9607:1;9594:14;;9676:5;;;9547:154;9732:11;9746:25;89:1:4;9765:5:0;9746:7;:25::i;:::-;9732:39;;9835:20;9870:21;9906:17;9938:25;9978:21;10003:59;133:1:4;10033:13:0;10048:5;10055:6;10003:17;:59::i;:::-;9834:228;;-1:-1:-1;9834:228:0;;-1:-1:-1;9834:228:0;-1:-1:-1;9834:228:0;-1:-1:-1;9834:228:0;-1:-1:-1;10099:34:0;9834:228;;10099:34;:20;:34;:::i;:::-;10163:9;;10077:56;;;10148:44;;-1:-1:-1;;;;;10163:9:0;10174:8;10184:7;10148:14;:44::i;:::-;10232:13;10213:15;:32;10209:277;;;10315:1;10302:14;;10380:5;;;;;;;;;10209:277;10439:31;:10;10454:15;10439:31;:14;:31;:::i;:::-;10426:44;;10510:28;89:1:4;10532:5:0;10510:10;:28::i;:::-;10502:36;;9099:1451;;;;;;;;;;10627:22;;10623:106;;10682:10;;10666:51;;-1:-1:-1;;;;;10682:10:0;10694:2;10698:18;10666:15;:51::i;:::-;10834:15;:33;;;;;10866:1;10853:10;:14;10834:33;:57;;;;;10880:11;10871:5;:20;;10834:57;10830:314;;;10997:135;133:1:4;11048:10:0;11081:8;11090:1;11081:11;;;;;;;10997:135;10952:8;10961:1;10952:11;;;;;;;;;;;;;10965:8;10974:1;10965:11;;;;;;;;;;;;;;;;;10908:224;;;;;;;-1:-1:-1;10908:224:0;-1:-1:-1;10908:224:0;-1:-1:-1;10830:314:0;11160:17;;11156:486;;11198:14;;11194:256;;11285:149;11331:10;11343:13;11358:8;11367:1;11358:11;;;;;;;;;;;;;;11371:8;11380:1;11371:11;;;;;;;;;;;;;;11409;11422;;11285:45;:149::i;:::-;-1:-1:-1;11233:201:0;;-1:-1:-1;11233:201:0;-1:-1:-1;11194:256:0;11484:9;;11495:10;;11466:71;;11480:2;;-1:-1:-1;;;;;11484:9:0;;;;11495:10;11507:13;11522:14;11466:13;:71::i;:::-;11560:15;;;:44;;;11593:11;11579:10;:8;:10::i;:::-;:25;;11560:44;11552:78;;;;;-1:-1:-1;;;11552:78:0;;;;;;;;;;;;-1:-1:-1;;;11552:78:0;;;;;;;;;;;;;;6037:299:13;6165:13;6202:126;6212:115;6250:76;6314:2;:11;;;6250:59;6303:5;6250:38;6280:7;6250:38;:9;6264:10;6250:25;:13;:25;:::i;:76::-;6212:33;6243:1;6212:26;6227:10;;6212:26;:14;:26;:::i;:115::-;6202:9;:126::i;:::-;6191:137;6037:299;-1:-1:-1;;;;;6037:299:13:o;583:98:14:-;641:7;672:1;668;:5;;;;;;;583:98;-1:-1:-1;;;583:98:14:o;6383:299:13:-;6513:13;6550:124;6560:113;6596:76;6666:5;6596:65;6649:2;:11;;;6596:38;6626:7;6596:38;:9;6610:10;6596:25;:13;:25;:::i;:76::-;6560:31;6589:1;6560:24;6574:9;;6560:24;:13;:24;:::i;2201:640:0:-;2359:13;2374:21;2397:17;2425:27;2454:23;2535:147;2591:9;2602:13;2617:5;2624:11;;2637:15;;2654:14;;2670:11;2535:41;:147::i;:::-;2490:192;;-1:-1:-1;2490:192:0;-1:-1:-1;2490:192:0;-1:-1:-1;2719:114:0;2749:48;2787:9;2749:37;:48::i;:::-;2799:8;2809:16;2827:5;2719:15;:114::i;:::-;2693:140;;;;;;;;2201:640;;;;;;;;;:::o;106:321:11:-;183:15;237:1;:8;226:1;:8;:19;215:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;215:31:11;-1:-1:-1;211:35:11;-1:-1:-1;262:6:11;257:70;274:1;:8;272:1;:10;257:70;;;311:1;313;311:4;;;;;;;;;;;;;;304:1;306;304:4;;;;;;;;;;;;;;;;;:11;284:3;;257:70;;;-1:-1:-1;344:6:11;339:81;356:1;:8;354:1;:10;339:81;;;404:1;406;404:4;;;;;;;;;;;;;;386:1;399;388;:8;:12;386:15;;;;;;;;;;;;;;;;;:22;366:3;;339:81;;;;106:321;;;;:::o;435:336::-;521:18;581:1;:8;570:1;:8;:19;556:34;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;556:34:11;-1:-1:-1;552:38:11;-1:-1:-1;606:6:11;601:70;618:1;:8;616:1;:10;601:70;;;655:1;657;655:4;;;;;;;;;;;;;;648:1;650;648:4;;;;;;;;-1:-1:-1;;;;;648:11:11;;;;:4;;;;;;;;;;;:11;-1:-1:-1;628:3:11;601:70;;;-1:-1:-1;688:6:11;683:81;700:1;:8;698:1;:10;683:81;;;748:1;750;748:4;;;;;;;;;;;;;;730:1;743;732;:8;:12;730:15;;;;;;;;-1:-1:-1;;;;;730:22:11;;;;:15;;;;;;;;;;;:22;-1:-1:-1;710:3:11;683:81;;3018:411:4;3281:9;3310:33;;;:22;:33;;;;;;;;:38;;;;;;;;;3366:9;;:55;;3417:4;3366:55;;;3378:33;;;;:22;:33;;;;;;;;:36;;;;;;;;;3366:55;3359:62;3018:411;-1:-1:-1;;;3018:411:4:o;4578:497:1:-;4720:7;;4702:33;;;-1:-1:-1;;;4702:33:1;;;;4687:12;;-1:-1:-1;;;;;4720:7:1;;4702:31;;:33;;;;;;;;;;;;;;4720:7;4702:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4702:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4702:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4702:33:1;;-1:-1:-1;4750:6:1;4746:322;4762:8;:15;4760:1;:17;4746:322;;;-1:-1:-1;;;;;4803:13:1;;;;;;;4799:258;;;4842:4;-1:-1:-1;;;;;4836:20:1;;4857:7;4865:1;4857:10;;;;;;;;;;;;;;4836:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4836:32:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4836:32:1;;;;4887:55;4918:8;4927:1;4918:11;;;;;;;;;;;;;;4931:7;4939:1;4931:10;;;;;;;;;;;;;;4887:30;:55::i;:::-;4799:258;;;4996:45;5010:5;5017:8;5026:1;5017:11;;;;;;;;;;;;;;5030:7;5038:1;5030:10;;;;;;;;;;;;;;4996:13;:45::i;:::-;4779:3;;4746:322;;3846:986:13;4032:15;4049:19;4070;4102:13;4118:48;4127:11;4140:12;4154:11;4118:8;:48::i;:::-;4102:64;;4275:11;4264:8;:22;4260:565;;;4321:123;4395:48;4425:2;:17;;;4395:25;:11;4411:8;4395:25;:15;:25;:::i;:48::-;4321:51;4354:2;:17;;;4321:28;:11;4337;4321:28;:15;:28;:::i;:123::-;4303:142;;4494:1;4477:14;:18;:39;;4515:1;4477:39;;;4498:14;4477:39;4460:56;;4554:14;4539:11;:29;;4531:66;;;;;-1:-1:-1;;;4531:66:13;;;;;;;;;;;;-1:-1:-1;;;4531:66:13;;;;;;;;;;;;;;;4644:31;:11;4660:14;4644:31;:15;:31;:::i;:::-;4612:98;-1:-1:-1;4677:32:13;;;;-1:-1:-1;4260:565:13;;;4784:11;;-1:-1:-1;4797:15:13;;-1:-1:-1;4260:565:13;3846:986;;;;;;;;;;;:::o;3842:855:0:-;4040:4;;4017:41;;4031:7;;-1:-1:-1;;;;;4040:4:0;4046:11;4017:13;:41::i;:::-;4135:4;;4120:29;;;-1:-1:-1;;;4120:29:0;;;;4072:15;;;;-1:-1:-1;;;;;4135:4:0;;;;4120:27;;:29;;;;;;;;;;;;;;;4135:4;4120:29;;;5:2:-1;;;;30:1;27;20:12;5:2;4120:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4120:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4120:29:0;-1:-1:-1;;;;;4108:41:0;;;;;;:106;;4192:12;4211:1;4108:106;;;4171:1;4175:12;4108:106;4260:7;;4242:33;;;-1:-1:-1;;;4242:33:0;;;;4071:143;;-1:-1:-1;4071:143:0;;-1:-1:-1;4227:12:0;;-1:-1:-1;;;;;4260:7:0;;;;4242:31;;:33;;;;;;;;;;;;;;4260:7;4242:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4242:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4242:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4242:33:0;;-1:-1:-1;;;;;;4290:16:0;;;;;;;4286:364;;;4338:4;;4396:12;;;4338:4;4396:12;;;;;;;;;;-1:-1:-1;;;4323:86:0;;;;;;;;;;;;;;4389:4;4323:86;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4338:4:0;;;;4323:33;;:86;;;;4389:4;;4396:12;;4323:86;;;;;;;4396:12;4323:86;;;;4396:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4323:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4323:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4424:34:0;;;-1:-1:-1;;;4424:34:0;;;;;;;;;;-1:-1:-1;;;;;4424:20:0;;;-1:-1:-1;4424:20:0;;-1:-1:-1;4424:34:0;;;;;-1:-1:-1;;4424:34:0;;;;;;;-1:-1:-1;4424:20:0;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;4424:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4424:34:0;;;;4473:48;4504:2;4508:12;4473:30;:48::i;:::-;4286:364;;;4578:4;;4625:12;;;4578:4;4625:12;;;;;;;;;-1:-1:-1;;;;;4578:4:0;;;;4563:33;;4597:10;;4609;;4621:2;;4625:12;;4563:75;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4563:75:0;-1:-1:-1;;;;;4563:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4563:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4563:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4563:75:0;;;;4286:364;4677:4;;4662:27;;;-1:-1:-1;;;;;;4662:27:0;;;;-1:-1:-1;;;;;4677:4:0;;;;4662:25;;:27;;;;;4677:4;;4662:27;;;;;;;;4677:4;;4662:27;;;5:2:-1;;;;30:1;27;20:12;5:2;4662:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4662:27:0;;;;3842:855;;;;;;;;:::o;5666:132:1:-;5738:16;:18;;;;;;;;5666:132;:::o;658:250:3:-;759:26;862:31;;;:20;:31;;;;;;;;:38;;;;;;;;;822:30;;;:19;:30;;;;;:37;;;;;;;;:78;;658:250::o;1633:667:4:-;1755:21;1779:37;;;:26;:37;;;;;;1831:21;1827:414;;1886:33;;;;:22;:33;;;;;;;;:36;;;;;;;;;:44;;;1945:40;;;;;:44;1827:414;;;2032:13;2047:14;2065:31;2079:9;2090:5;2065:13;:31::i;:::-;2111:33;;;;:22;:33;;;;;;;;:43;;;;;;;;;:51;;;2177:40;;;;;;;:52;-1:-1:-1;;1827:414:4;-1:-1:-1;;2253:37:4;;;;:26;:37;;;;;:39;;;;;;1633:667::o;929:273:3:-;1035:9;1047:30;;;:19;:30;;;;;;;;:37;;;;;;;;;;;1095:29;;;;;;;;;:36;;;;;;;;:42;;;;;;;;;:49;;;;1155:37;;;;;:39;;;;;;929:273::o;2538:1032::-;2644:10;2670:31;;;:20;:31;;;;;;;;:38;;;;;;;;;2710:30;;;:19;:30;;;;;:37;;;;;;;;;;2767:12;;;2759:38;;;;;-1:-1:-1;;;2759:38:3;;;;;;;;;;;;-1:-1:-1;;;2759:38:3;;;;;;;;;;;;;;;2894:8;2905:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;;3002:1;2996:7;;2984:361;3007:4;3005:1;:6;2984:361;;;3044:4;3037:3;:11;3033:57;;;3069:5;;3033:57;3112:18;:29;;;;;;;;;;;:36;;;;;;;;:39;;;;;;;;;;3227:45;;;3112:39;;-1:-1:-1;;3013:3:3;2984:361;;;;3428:3;3420:4;:11;3412:36;;;;;-1:-1:-1;;;3412:36:3;;;;;;;;;;;;-1:-1:-1;;;3412:36:3;;;;;;;;;;;;;;;-1:-1:-1;;;3468:18:3;:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;3461:50;;;3522:31;;;:20;:31;;;;;;:38;;;;;;;;;;:40;;;;;;;-1:-1:-1;2538:1032:3:o;2308:463:4:-;2431:13;2446:14;2464:31;2478:9;2489:5;2464:13;:31::i;:::-;2430:65;;;;2523:9;2514:5;:18;2506:44;;;;;-1:-1:-1;;;2506:44:4;;;;;;;;;;;;-1:-1:-1;;;2506:44:4;;;;;;;;;;;;;;;2607:33;;;;:22;:33;;;;;;;;:44;;;;;;;;;;;2561:43;;;;;;:90;;;;2662:51;;;;2724:37;;;:26;:37;;;;;;:39;;-1:-1:-1;;2724:39:4;;;-1:-1:-1;2308:463:4:o;1315:195:15:-;1423:12;;;1385;1423;;;;;;;;;;1402:34;;1385:12;;-1:-1:-1;;;;;1402:7:15;;;1416:5;;1423:12;;;;;;;1402:34;1423:12;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1402:34:15;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1384:52:15;;;1455:7;1447:55;;;;-1:-1:-1;;;1447:55:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1458:223:13;1589:14;1628:45;1667:5;1628:34;:11;1644:2;:17;;;1628:34;:15;:34;:::i;5020:970::-;5207:15;5224:18;5244;5275:13;5291:48;5300:11;5313:12;5327:11;5291:8;:48::i;:::-;5275:64;;5447:11;5436:8;:22;5432:551;;;5492:121;5563:49;5603:8;5563:35;:12;5580:2;:17;;;5563:35;:16;:35;:::i;:49::-;5492:52;5532:11;5492:35;:12;5509:2;:17;;;5492:35;:16;:35;:::i;:121::-;5475:139;;5661:1;5645:13;:17;:37;;5681:1;5645:37;;;5665:13;5645:37;5629:53;;5720:13;5705:11;:28;;5697:64;;;;;-1:-1:-1;;;5697:64:13;;;;;;;;;;;;-1:-1:-1;;;5697:64:13;;;;;;;;;;;;;;317:303:12;362:6;389:1;385;:5;381:232;;;-1:-1:-1;411:1:12;444;440;436:5;;:9;460:92;471:1;467;:5;460:92;;;497:1;493:5;;535:1;530;526;522;:5;;;;;;:9;521:15;;;;;;517:19;;460:92;;;381:232;;;;573:6;;569:44;;-1:-1:-1;600:1:12;317:303;;;:::o;298:1895:0:-;459:27;;542:16;524:15;;604:24;611:9;622:5;604:6;:24::i;:::-;590:38;;639:28;684:6;670:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;670:21:0;;639:52;;702:24;740:6;729:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;729:18:0;;702:45;;758:1057;773:6;765:5;:14;:32;;;;;796:1;783:10;:14;765:32;758:1057;;;814:12;829:22;834:9;845:5;829:4;:22::i;:::-;814:37;-1:-1:-1;870:12:0;866:23;;884:5;;;866:23;904:18;;:::i;:::-;-1:-1:-1;925:21:0;;;;:12;:21;;;;;;;;;904:42;;;;;;;;;-1:-1:-1;;;;;904:42:0;;;;;-1:-1:-1;904:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;904:42:0;;;;;;;;;;;;;;;;;;961:18;;;;973:5;;961:18;;;;;;-1:-1:-1;;;;;961:29:0;;;:18;;;;;;;;;;;:29;-1:-1:-1;1036:18:0;;;1005:15;;1023:31;;:65;;1078:10;1023:65;;;1057:5;:18;;;1023:65;1005:83;;1145:10;1124:5;:18;;;:31;1103:5;:18;;:52;;;;;1190:10;1170;1181:5;1170:17;;;;;;;;;;;;;;;;;:30;1272:18;;;;1230:23;;;;;1272;1268:318;;1353:18;;;;;1316:21;;;;:12;:21;;;;;;;;;:34;;:55;;;;1420:8;;;;1407:11;;1430;;;;;1443:17;;;;;1462:40;;1504:15;;;;1395:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1395:125:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;1539:7:0;;;;;-1:-1:-1;1565:5:0;;1268:318;1602:36;1632:5;1602:29;:36::i;:::-;1685:8;;;;;1672:11;;1695;;;;;1708:17;;;;;-1:-1:-1;1727:36:0;;;1765:15;;;;1660:121;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1660:121:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1796:7:0;;;;;-1:-1:-1;758:1057:0;;;1831:9;;1827:359;;1870:37;1888:11;1901:5;1870:17;:37::i;:::-;1857:50;;1945:5;1934:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1934:17:0;;1922:29;;1994:10;:17;1974:9;:16;:37;;1966:63;;;;;-1:-1:-1;;;1966:63:0;;;;;;;;;;;;-1:-1:-1;;;1966:63:0;;;;;;;;;;;;;;;2049:6;2044:131;2059:5;2057:1;:7;2044:131;;;2105:54;2142:16;2105:32;2123:10;2134:1;2123:13;;;;;;;;;;;;;;2105;:17;;:32;;;;:::i;:54::-;2090:9;2100:1;2090:12;;;;;;;;;;;;;;;;;:69;2066:3;;2044:131;;;;1827:359;298:1895;;;;;;;;;;;;:::o;3424:231:13:-;3520:10;3546:16;;3542:106;;3625:11;3587:35;:12;3604:2;:17;;;3587:35;:16;:35;:::i;:::-;:49;;;;;;;3424:231;-1:-1:-1;;;;3424:231:13:o;805:820:4:-;913:13;973:33;;;:22;:33;;;;;;;;:36;;;;;;;;;89:1;1025:22;;1021:597;;;1085:216;1098:5;1091:4;:12;1085:216;;;1165:33;;;;:22;:33;;;;;;;;:39;;;;;;;;;1135:4;;-1:-1:-1;1227:9:4;1223:63;;1261:5;;1223:63;1085:216;;;1021:597;;;133:1;1331:9;:23;1327:291;;;1391:216;1404:5;1397:4;:12;1391:216;;;1471:33;;;;:22;:33;;;;;;;;:39;;;;;;;;;1441:4;;-1:-1:-1;1533:9:4;1529:63;;1567:5;;1529:63;1391:216;;;805:820;;;;;:::o;1708:340:3:-;1807:9;1856:31;;;:20;:31;;;;;;;;:38;;;;;;;;;1896:30;;;:19;:30;;;;;:37;;;;;;;;;1949:13;;;1945:96;;1986:18;:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;;-1:-1:-1;1945:96:3;1708:340;;;;;;:::o;7529:986:1:-;7655:33;7659:5;:15;;;7676:5;:11;;;7655:3;:33::i;:::-;-1:-1:-1;7763:13:1;;;;;7750:27;;;;:12;:27;;;;;;;7743:34;;-1:-1:-1;;;;;;7743:34:1;;;;;-1:-1:-1;7743:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7852:11;;-1:-1:-1;;;;;7841:23:1;;;:10;:23;;;:30;7906:16;;;;7890:32;;7882:63;;;;;-1:-1:-1;;;7882:63:1;;;;;;;;;;;;-1:-1:-1;;;7882:63:1;;;;;;;;;;;;;;779:383:11;855:18;904:1;:8;894:6;:18;;886:45;;;;;-1:-1:-1;;;886:45:11;;;;;;;;;;;;-1:-1:-1;;;886:45:11;;;;;;;;;;;;;;;956:1;:8;946:6;:18;942:213;;;-1:-1:-1;985:1:11;942:213;;;1046:6;1032:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1032:21:11;-1:-1:-1;1028:25:11;-1:-1:-1;1073:6:11;1068:76;1085:6;1083:1;:8;1068:76;;;1124:1;1126;1124:4;;;;;;;;;;;;;;1117:1;1119;1117:4;;;;;;;;-1:-1:-1;;;;;1117:11:11;;;;:4;;;;;;;;;;;:11;-1:-1:-1;1093:3:11;1068:76;;1222:448:3;1310:9;1359:31;;;:20;:31;;;;;;;;:38;;;;;;;;;1399:30;;;:19;:30;;;;;:37;;;;;;;;;1452:13;;;1448:215;;-1:-1:-1;1488:18:3;:29;;;;;;;;;;;:36;;;;;;;;:43;;;;;;;;;;;1546:50;;;;1611:31;;;-1:-1:-1;1611:31:3;;;;;;:38;;;;;;;:40;;;;;;;;-1:-1:-1;1488:43:3;1222:448::o;134:20653:0:-;;;;;;;;;-1:-1:-1;134:20653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;134:20653:0;;;;;;;;;;;;;;;;;;;:::o"
    },
    "contracts/OrderBookBase.sol:OrderBookBase": {
      "abi": [
        {
          "inputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCanceled",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderClosed",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCreated",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderUpdate",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "factory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserveBase",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserveQuote",
              "type": "uint112"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "name": "getUserOrders",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "orderIds",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "_pair",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_minAmount",
              "type": "uint256"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "maxSize",
              "type": "uint32"
            }
          ],
          "name": "marketBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "marketOrder",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "order",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "marketOrders",
          "outputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderType",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderIndex",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "minAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newMinAmount",
              "type": "uint256"
            }
          ],
          "name": "minAmountUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pair",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "decimal",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceStep",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newPriceStep",
              "type": "uint256"
            }
          ],
          "name": "priceStepUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "protocolFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newProtocolFeeRate",
              "type": "uint256"
            }
          ],
          "name": "protocolFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "name": "rangeBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address payable",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "safeRefund",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "subsidyFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newSubsidyFeeRate",
              "type": "uint256"
            }
          ],
          "name": "subsidyFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "userOrders",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "6080604052600160125534801561001557600080fd5b50600580546001600160a01b03191633179055611b3f806100376000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e5780630902f1ac146101cb57806319eda4bc146101f9578063217a4b7014610218578063346970f91461023c57806338bde791146102a6578063573dd9db146102c057806358f858801461032d5780636069f0801461033557806363c69f08146103525780637de81d8b14610378578063856652e91461043457806388d519c41461046057806398d5fdca146104685780639b2cb5d814610470578063a6b63eb814610478578063a8aa1b31146104ba578063bc9113f0146104c2578063c45a0155146104ca578063c55dae63146104d2578063cb160866146104da578063db7b373e14610508578063deb65ac314610510578063e52fa98b1461052d578063f1564c0b14610556578063f1a2e84914610573578063f361df081461057b575b600080fd5b610156610583565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610190578181015183820152602001610178565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d36105b0565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b6102166004803603602081101561020f57600080fd5b50356105e1565b005b6102206106df565b604080516001600160a01b039092168252519081900360200190f35b6102596004803603602081101561025257600080fd5b50356106ee565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b6102ae61073e565b60408051918252519081900360200190f35b6102dd600480360360208110156102d657600080fd5b5035610744565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610319578181015183820152602001610301565b505050509050019250505060405180910390f35b6102ae6108e1565b6102166004803603602081101561034b57600080fd5b50356108e7565b6102dd6004803603602081101561036857600080fd5b50356001600160a01b03166109e5565b61039b6004803603604081101561038e57600080fd5b5080359060200135610a51565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103df5781810151838201526020016103c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561041e578181015183820152602001610406565b5050505090500194505050505060405180910390f35b6102ae6004803603604081101561044a57600080fd5b506001600160a01b038135169060200135610ba0565b6102ae610bce565b6102ae610bd4565b6102ae610c4d565b610216600480360360a081101561048e57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610c53565b610220610f78565b6102ae610f87565b610220611000565b61022061100f565b610216600480360360408110156104f057600080fd5b506001600160a01b038135811691602001351661101e565b6102ae61122c565b6102166004803603602081101561052657600080fd5b5035611232565b61039b6004803603604081101561054357600080fd5b508035906020013563ffffffff16611356565b6102166004803603602081101561056c57600080fd5b5035611463565b6102ae611587565b6102ae61158d565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b5460009283926105d8926001600160a01b03928316929182169116611593565b90939092509050565b601254600114610621576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461063b906001600160a01b0316611702565b6001600160a01b0316336001600160a01b03161461068c576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b60648111156106d5576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610771611ab3565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e08201528351909284916107f457fe5b60200260200101818152505080602001516001600160a01b03168260018151811061081b57fe5b60200260200101818152505080604001518260028151811061083957fe5b60200260200101818152505080606001518260038151811061085757fe5b60200260200101818152505080608001518260048151811061087557fe5b6020026020010181815250508060a001518260058151811061089357fe5b6020026020010181815250508060c00151826006815181106108b157fe5b6020026020010181815250508060e00151826007815181106108cf57fe5b60200260200101818152505050919050565b600e5481565b601254600114610927576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610941906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614610992576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e8111156109db576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b038116600090815260116020908152604091829020805483518184028101840190945280845260609392830182828015610a4557602002820191906000526020600020905b815481526020019060010190808311610a31575b50505050509050919050565b6060806000610a618560006117dd565b905060006001861415610a9c575b8115801590610a7e5750848210155b15610a9757610a8d86836117dd565b9150600101610a6f565b610ace565b6002861415610ace575b8115801590610ab55750848211155b15610ace57610ac486836117dd565b9150600101610aa6565b8015610b975780604051908082528060200260200182016040528015610afe578160200160208202803883390190505b50935080604051908082528060200260200182016040528015610b2b578160200160208202803883390190505b509250610b398660006117dd565b915060005b81811015610b955782858281518110610b5357fe5b602002602001018181525050610b6987846117fa565b848281518110610b7557fe5b602002602001018181525050610b8b87846117dd565b9250600101610b3e565b505b50509250929050565b60116020528160005260406000208181548110610bb957fe5b90600052602060002001600091509150505481565b60075481565b600654600a54600b5460009283928392610bfd926001600160a01b039081169281169116611593565b91509150816001600160701b0316600014610c4857816001600160701b0316610c3d600954600a0a836001600160701b031661187490919063ffffffff16565b81610c4457fe5b0492505b505090565b60085481565b6005546001600160a01b03163314610c9e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015610ce9576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015610d34576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b158015610ddc57600080fd5b505afa158015610df0573d6000803e3d6000fd5b505050506040513d6020811015610e0657600080fd5b505190925090506001600160a01b03808316908716148015610e395750846001600160a01b0316816001600160a01b0316145b80610e715750856001600160a01b0316816001600160a01b0316148015610e715750846001600160a01b0316826001600160a01b0316145b610eb7576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015610f3157600080fd5b505afa158015610f45573d6000803e3d6000fd5b505050506040513d6020811015610f5b57600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b505160ff16919050565b6005546001600160a01b031681565b600a546001600160a01b031681565b60125460011461105e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611078906001600160a01b0316611702565b6001600160a01b0316336001600160a01b0316146110c9576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b03821661111c57478015611116576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611114573d6000803e3d6000fd5b505b50611223565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561116657600080fd5b505afa15801561117a573d6000803e3d6000fd5b505050506040513d602081101561119057600080fd5b5051600a5490915081906001600160a01b03858116911614156111d55760006111b960026118dd565b90508083116111c95760006111cd565b8083035b91505061120f565b600b546001600160a01b038581169116141561120f5760006111f760016118dd565b905080831161120757600061120b565b8083035b9150505b801561122057611220848483611919565b50505b50506001601255565b60095481565b601254600114611272576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461128c906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611301576112ae6001611aa1565b1580156112c257506112c06002611aa1565b155b611301576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561134c576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b606080600061136485611aa1565b90508363ffffffff1681116113795780611381565b8363ffffffff165b9050806040519080825280602002602001820160405280156113ad578160200160208202803883390190505b509250806040519080825280602002602001820160405280156113da578160200160208202803883390190505b50915060006113ea8660006117dd565b905060005b81158015906114035750828163ffffffff16105b15610b955781858263ffffffff168151811061141b57fe5b60200260200101818152505061143187836117fa565b848263ffffffff168151811061144357fe5b60200260200101818152505061145987836117dd565b91506001016113ef565b6012546001146114a3576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546114bd906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611532576114df6001611aa1565b1580156114f357506114f16002611aa1565b155b611532576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561157d576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b031614156115f3576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106116145783611616565b845b90506001600160a01b038116611662576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60608110156116c857600080fd5b50805160209091015190925090506001600160a01b03878116908416146116f05780826116f3565b81815b90999098509650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b8181101561186b576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101611829565b50505092915050565b600081158061188f5750508082028282828161188c57fe5b04145b6118d7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b6000806118eb8360006117dd565b90505b8015611913576118fe83826117fa565b8201915061190c83826117dd565b90506118ee565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119c25780518252601f1990920191602091820191016119a3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611a24576040519150601f19603f3d011682016040523d82523d6000602084013e611a29565b606091505b5091509150818015611a57575080511580611a575750808060200190516020811015611a5457600080fd5b50515b611a9a576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a7231582068a190ca533713eb961d085ac92a787bb45e6b65391c158c7f706ad6fcab081064736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x12 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x1B3F DUP1 PUSH2 0x37 PUSH1 0x0 CODECOPY 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 0x149 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x19EDA4BC EQ PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x217A4B70 EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x346970F9 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x38BDE791 EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x573DD9DB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0x58F85880 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0x6069F080 EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0x63C69F08 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0x7DE81D8B EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0x856652E9 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x88D519C4 EQ PUSH2 0x460 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x9B2CB5D8 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0xA6B63EB8 EQ PUSH2 0x478 JUMPI DUP1 PUSH4 0xA8AA1B31 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xBC9113F0 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x4CA JUMPI DUP1 PUSH4 0xC55DAE63 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0xCB160866 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0xDB7B373E EQ PUSH2 0x508 JUMPI DUP1 PUSH4 0xDEB65AC3 EQ PUSH2 0x510 JUMPI DUP1 PUSH4 0xE52FA98B EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0xF1564C0B EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xF1A2E849 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xF361DF08 EQ PUSH2 0x57B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x156 PUSH2 0x583 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x190 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x178 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1BD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D3 PUSH2 0x5B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 RETURN JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5E1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x220 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6EE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP10 DUP11 AND DUP2 MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x100 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2AE PUSH2 0x73E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2DD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x319 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x301 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2AE PUSH2 0x8E1 JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x8E7 JUMP JUMPDEST PUSH2 0x2DD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x39B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xA51 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x41E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x406 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBA0 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xBCE JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xBD4 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xC4D JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0xC53 JUMP JUMPDEST PUSH2 0x220 PUSH2 0xF78 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xF87 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x1000 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x100F JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x101E JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x122C JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1232 JUMP JUMPDEST PUSH2 0x39B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x543 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1356 JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1463 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x1587 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x158D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD PUSH17 0x48796272696458204F72646572426F6F6B PUSH1 0x78 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH2 0x5D8 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x1593 JUMP JUMPDEST SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x621 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x63B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x68C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP2 GT ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP6 SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x8 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH2 0x100 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x771 PUSH2 0x1AB3 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP5 SWAP2 PUSH2 0x7F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x81B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x839 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x857 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0x875 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0x893 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0x8B1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0x8CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x927 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x941 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x992 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 GT ISZERO PUSH2 0x9DB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA45 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xA31 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0xA61 DUP6 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 EQ ISZERO PUSH2 0xA9C JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xA7E JUMPI POP DUP5 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0xA97 JUMPI PUSH2 0xA8D DUP7 DUP4 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xA6F JUMP JUMPDEST PUSH2 0xACE JUMP JUMPDEST PUSH1 0x2 DUP7 EQ ISZERO PUSH2 0xACE JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xAB5 JUMPI POP DUP5 DUP3 GT ISZERO JUMPDEST ISZERO PUSH2 0xACE JUMPI PUSH2 0xAC4 DUP7 DUP4 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xAA6 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB97 JUMPI DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xAFE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB2B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0xB39 DUP7 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB95 JUMPI DUP3 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB53 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xB69 DUP8 DUP5 PUSH2 0x17FA JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB75 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xB8B DUP8 DUP5 PUSH2 0x17DD JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0xB3E JUMP JUMPDEST POP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xBB9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0xBFD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 DUP2 AND SWAP2 AND PUSH2 0x1593 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x0 EQ PUSH2 0xC48 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0xC3D PUSH1 0x9 SLOAD PUSH1 0xA EXP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x1874 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0xC44 JUMPI INVALID JUMPDEST DIV SWAP3 POP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC9E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2327A92124A22222A7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 LT ISZERO PUSH2 0xCE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0xD34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD21220A7 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0xD21220A7 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP8 AND EQ DUP1 ISZERO PUSH2 0xE39 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0xE71 JUMPI POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xE71 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xEB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x151BDAD95B8814185A5C88125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xB DUP1 SLOAD SWAP4 DUP10 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE PUSH1 0x7 DUP6 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP2 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF45 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x9 SSTORE POP POP PUSH1 0x8 SSTORE POP POP PUSH1 0x1E PUSH1 0xE SSTORE POP POP PUSH1 0x32 PUSH1 0xF SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x105E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1078 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x10C9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x111C JUMPI SELFBALANCE DUP1 ISZERO PUSH2 0x1116 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1114 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1223 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x117A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA SLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 PUSH2 0x11B9 PUSH1 0x2 PUSH2 0x18DD JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x11C9 JUMPI PUSH1 0x0 PUSH2 0x11CD JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP PUSH2 0x120F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x120F JUMPI PUSH1 0x0 PUSH2 0x11F7 PUSH1 0x1 PUSH2 0x18DD JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1207 JUMPI PUSH1 0x0 PUSH2 0x120B JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP JUMPDEST DUP1 ISZERO PUSH2 0x1220 JUMPI PUSH2 0x1220 DUP5 DUP5 DUP4 PUSH2 0x1919 JUMP JUMPDEST POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1272 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x128C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1301 JUMPI PUSH2 0x12AE PUSH1 0x1 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x12C2 JUMPI POP PUSH2 0x12C0 PUSH1 0x2 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1301 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x134C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1364 DUP6 PUSH2 0x1AA1 JUMP JUMPDEST SWAP1 POP DUP4 PUSH4 0xFFFFFFFF AND DUP2 GT PUSH2 0x1379 JUMPI DUP1 PUSH2 0x1381 JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13AD JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13DA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH2 0x13EA DUP7 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1403 JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT JUMPDEST ISZERO PUSH2 0xB95 JUMPI DUP2 DUP6 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x141B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x1431 DUP8 DUP4 PUSH2 0x17FA JUMP JUMPDEST DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1443 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x1459 DUP8 DUP4 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x13EF JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x14A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x14BD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1532 JUMPI PUSH2 0x14DF PUSH1 0x1 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x14F3 JUMPI POP PUSH2 0x14F1 PUSH1 0x2 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1532 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x157D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x15F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4944454E544943414C5F414444524553534553 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1614 JUMPI DUP4 PUSH2 0x1616 JUMP JUMPDEST DUP5 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1662 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A45524F5F41444452455353 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x16C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x16F0 JUMPI DUP1 DUP3 PUSH2 0x16F3 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1751 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x186B JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP4 MSTORE PUSH1 0x10 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1829 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x188F JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x188C JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x18D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x18EB DUP4 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x1913 JUMPI PUSH2 0x18FE DUP4 DUP3 PUSH2 0x17FA JUMP JUMPDEST DUP3 ADD SWAP2 POP PUSH2 0x190C DUP4 DUP3 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP PUSH2 0x18EE JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH25 0x7472616E7366657228616464726573732C75696E7432353629 PUSH1 0x38 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x19C2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19A3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1A24 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1A57 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1A57 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1A9A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH9 0xA190CA533713EB961D ADDMOD GAS 0xC9 0x2A PUSH25 0x7BB45E6B65391C158C7F706AD6FCAB081064736F6C63430005 LT STOP ORIGIN ",
          "sourceMap": "277:16457:1:-;;;5470:1;5446:25;;2704:60;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2736:7:1;:20;;-1:-1:-1;;;;;;2736:20:1;2746:10;2736:20;;;277:16457;;;;;;"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e5780630902f1ac146101cb57806319eda4bc146101f9578063217a4b7014610218578063346970f91461023c57806338bde791146102a6578063573dd9db146102c057806358f858801461032d5780636069f0801461033557806363c69f08146103525780637de81d8b14610378578063856652e91461043457806388d519c41461046057806398d5fdca146104685780639b2cb5d814610470578063a6b63eb814610478578063a8aa1b31146104ba578063bc9113f0146104c2578063c45a0155146104ca578063c55dae63146104d2578063cb160866146104da578063db7b373e14610508578063deb65ac314610510578063e52fa98b1461052d578063f1564c0b14610556578063f1a2e84914610573578063f361df081461057b575b600080fd5b610156610583565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610190578181015183820152602001610178565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d36105b0565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b6102166004803603602081101561020f57600080fd5b50356105e1565b005b6102206106df565b604080516001600160a01b039092168252519081900360200190f35b6102596004803603602081101561025257600080fd5b50356106ee565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b6102ae61073e565b60408051918252519081900360200190f35b6102dd600480360360208110156102d657600080fd5b5035610744565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610319578181015183820152602001610301565b505050509050019250505060405180910390f35b6102ae6108e1565b6102166004803603602081101561034b57600080fd5b50356108e7565b6102dd6004803603602081101561036857600080fd5b50356001600160a01b03166109e5565b61039b6004803603604081101561038e57600080fd5b5080359060200135610a51565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103df5781810151838201526020016103c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561041e578181015183820152602001610406565b5050505090500194505050505060405180910390f35b6102ae6004803603604081101561044a57600080fd5b506001600160a01b038135169060200135610ba0565b6102ae610bce565b6102ae610bd4565b6102ae610c4d565b610216600480360360a081101561048e57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610c53565b610220610f78565b6102ae610f87565b610220611000565b61022061100f565b610216600480360360408110156104f057600080fd5b506001600160a01b038135811691602001351661101e565b6102ae61122c565b6102166004803603602081101561052657600080fd5b5035611232565b61039b6004803603604081101561054357600080fd5b508035906020013563ffffffff16611356565b6102166004803603602081101561056c57600080fd5b5035611463565b6102ae611587565b6102ae61158d565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b5460009283926105d8926001600160a01b03928316929182169116611593565b90939092509050565b601254600114610621576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461063b906001600160a01b0316611702565b6001600160a01b0316336001600160a01b03161461068c576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b60648111156106d5576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610771611ab3565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e08201528351909284916107f457fe5b60200260200101818152505080602001516001600160a01b03168260018151811061081b57fe5b60200260200101818152505080604001518260028151811061083957fe5b60200260200101818152505080606001518260038151811061085757fe5b60200260200101818152505080608001518260048151811061087557fe5b6020026020010181815250508060a001518260058151811061089357fe5b6020026020010181815250508060c00151826006815181106108b157fe5b6020026020010181815250508060e00151826007815181106108cf57fe5b60200260200101818152505050919050565b600e5481565b601254600114610927576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610941906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614610992576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e8111156109db576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b038116600090815260116020908152604091829020805483518184028101840190945280845260609392830182828015610a4557602002820191906000526020600020905b815481526020019060010190808311610a31575b50505050509050919050565b6060806000610a618560006117dd565b905060006001861415610a9c575b8115801590610a7e5750848210155b15610a9757610a8d86836117dd565b9150600101610a6f565b610ace565b6002861415610ace575b8115801590610ab55750848211155b15610ace57610ac486836117dd565b9150600101610aa6565b8015610b975780604051908082528060200260200182016040528015610afe578160200160208202803883390190505b50935080604051908082528060200260200182016040528015610b2b578160200160208202803883390190505b509250610b398660006117dd565b915060005b81811015610b955782858281518110610b5357fe5b602002602001018181525050610b6987846117fa565b848281518110610b7557fe5b602002602001018181525050610b8b87846117dd565b9250600101610b3e565b505b50509250929050565b60116020528160005260406000208181548110610bb957fe5b90600052602060002001600091509150505481565b60075481565b600654600a54600b5460009283928392610bfd926001600160a01b039081169281169116611593565b91509150816001600160701b0316600014610c4857816001600160701b0316610c3d600954600a0a836001600160701b031661187490919063ffffffff16565b81610c4457fe5b0492505b505090565b60085481565b6005546001600160a01b03163314610c9e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015610ce9576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015610d34576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b158015610ddc57600080fd5b505afa158015610df0573d6000803e3d6000fd5b505050506040513d6020811015610e0657600080fd5b505190925090506001600160a01b03808316908716148015610e395750846001600160a01b0316816001600160a01b0316145b80610e715750856001600160a01b0316816001600160a01b0316148015610e715750846001600160a01b0316826001600160a01b0316145b610eb7576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015610f3157600080fd5b505afa158015610f45573d6000803e3d6000fd5b505050506040513d6020811015610f5b57600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b505160ff16919050565b6005546001600160a01b031681565b600a546001600160a01b031681565b60125460011461105e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611078906001600160a01b0316611702565b6001600160a01b0316336001600160a01b0316146110c9576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b03821661111c57478015611116576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611114573d6000803e3d6000fd5b505b50611223565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561116657600080fd5b505afa15801561117a573d6000803e3d6000fd5b505050506040513d602081101561119057600080fd5b5051600a5490915081906001600160a01b03858116911614156111d55760006111b960026118dd565b90508083116111c95760006111cd565b8083035b91505061120f565b600b546001600160a01b038581169116141561120f5760006111f760016118dd565b905080831161120757600061120b565b8083035b9150505b801561122057611220848483611919565b50505b50506001601255565b60095481565b601254600114611272576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461128c906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611301576112ae6001611aa1565b1580156112c257506112c06002611aa1565b155b611301576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561134c576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b606080600061136485611aa1565b90508363ffffffff1681116113795780611381565b8363ffffffff165b9050806040519080825280602002602001820160405280156113ad578160200160208202803883390190505b509250806040519080825280602002602001820160405280156113da578160200160208202803883390190505b50915060006113ea8660006117dd565b905060005b81158015906114035750828163ffffffff16105b15610b955781858263ffffffff168151811061141b57fe5b60200260200101818152505061143187836117fa565b848263ffffffff168151811061144357fe5b60200260200101818152505061145987836117dd565b91506001016113ef565b6012546001146114a3576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546114bd906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611532576114df6001611aa1565b1580156114f357506114f16002611aa1565b155b611532576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561157d576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b031614156115f3576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106116145783611616565b845b90506001600160a01b038116611662576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60608110156116c857600080fd5b50805160209091015190925090506001600160a01b03878116908416146116f05780826116f3565b81815b90999098509650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b8181101561186b576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101611829565b50505092915050565b600081158061188f5750508082028282828161188c57fe5b04145b6118d7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b6000806118eb8360006117dd565b90505b8015611913576118fe83826117fa565b8201915061190c83826117dd565b90506118ee565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119c25780518252601f1990920191602091820191016119a3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611a24576040519150601f19603f3d011682016040523d82523d6000602084013e611a29565b606091505b5091509150818015611a57575080511580611a575750808060200190516020811015611a5457600080fd5b50515b611a9a576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a7231582068a190ca533713eb961d085ac92a787bb45e6b65391c158c7f706ad6fcab081064736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x149 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x19EDA4BC EQ PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x217A4B70 EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x346970F9 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x38BDE791 EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x573DD9DB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0x58F85880 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0x6069F080 EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0x63C69F08 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0x7DE81D8B EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0x856652E9 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x88D519C4 EQ PUSH2 0x460 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x9B2CB5D8 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0xA6B63EB8 EQ PUSH2 0x478 JUMPI DUP1 PUSH4 0xA8AA1B31 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xBC9113F0 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x4CA JUMPI DUP1 PUSH4 0xC55DAE63 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0xCB160866 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0xDB7B373E EQ PUSH2 0x508 JUMPI DUP1 PUSH4 0xDEB65AC3 EQ PUSH2 0x510 JUMPI DUP1 PUSH4 0xE52FA98B EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0xF1564C0B EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xF1A2E849 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xF361DF08 EQ PUSH2 0x57B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x156 PUSH2 0x583 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x190 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x178 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1BD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D3 PUSH2 0x5B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 RETURN JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5E1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x220 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6EE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP10 DUP11 AND DUP2 MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x100 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2AE PUSH2 0x73E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2DD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x319 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x301 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2AE PUSH2 0x8E1 JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x8E7 JUMP JUMPDEST PUSH2 0x2DD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x39B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xA51 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x41E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x406 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBA0 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xBCE JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xBD4 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xC4D JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0xC53 JUMP JUMPDEST PUSH2 0x220 PUSH2 0xF78 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0xF87 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x1000 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x100F JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x101E JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x122C JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1232 JUMP JUMPDEST PUSH2 0x39B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x543 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1356 JUMP JUMPDEST PUSH2 0x216 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1463 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x1587 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x158D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD PUSH17 0x48796272696458204F72646572426F6F6B PUSH1 0x78 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH2 0x5D8 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x1593 JUMP JUMPDEST SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x621 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x63B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x68C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP2 GT ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP6 SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x8 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH2 0x100 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x771 PUSH2 0x1AB3 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP5 SWAP2 PUSH2 0x7F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x81B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x839 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x857 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0x875 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0x893 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0x8B1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0x8CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x927 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x941 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x992 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 GT ISZERO PUSH2 0x9DB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA45 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xA31 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0xA61 DUP6 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 EQ ISZERO PUSH2 0xA9C JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xA7E JUMPI POP DUP5 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0xA97 JUMPI PUSH2 0xA8D DUP7 DUP4 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xA6F JUMP JUMPDEST PUSH2 0xACE JUMP JUMPDEST PUSH1 0x2 DUP7 EQ ISZERO PUSH2 0xACE JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xAB5 JUMPI POP DUP5 DUP3 GT ISZERO JUMPDEST ISZERO PUSH2 0xACE JUMPI PUSH2 0xAC4 DUP7 DUP4 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xAA6 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB97 JUMPI DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xAFE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB2B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0xB39 DUP7 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB95 JUMPI DUP3 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB53 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xB69 DUP8 DUP5 PUSH2 0x17FA JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB75 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xB8B DUP8 DUP5 PUSH2 0x17DD JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0xB3E JUMP JUMPDEST POP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xBB9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0xBFD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 DUP2 AND SWAP2 AND PUSH2 0x1593 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x0 EQ PUSH2 0xC48 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0xC3D PUSH1 0x9 SLOAD PUSH1 0xA EXP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x1874 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0xC44 JUMPI INVALID JUMPDEST DIV SWAP3 POP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC9E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2327A92124A22222A7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 LT ISZERO PUSH2 0xCE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0xD34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD21220A7 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0xD21220A7 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP8 AND EQ DUP1 ISZERO PUSH2 0xE39 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0xE71 JUMPI POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xE71 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0xEB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x151BDAD95B8814185A5C88125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xB DUP1 SLOAD SWAP4 DUP10 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE PUSH1 0x7 DUP6 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP2 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF45 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x9 SSTORE POP POP PUSH1 0x8 SSTORE POP POP PUSH1 0x1E PUSH1 0xE SSTORE POP POP PUSH1 0x32 PUSH1 0xF SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x105E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1078 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x10C9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x111C JUMPI SELFBALANCE DUP1 ISZERO PUSH2 0x1116 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1114 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1223 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x117A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA SLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 PUSH2 0x11B9 PUSH1 0x2 PUSH2 0x18DD JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x11C9 JUMPI PUSH1 0x0 PUSH2 0x11CD JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP PUSH2 0x120F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x120F JUMPI PUSH1 0x0 PUSH2 0x11F7 PUSH1 0x1 PUSH2 0x18DD JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1207 JUMPI PUSH1 0x0 PUSH2 0x120B JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP JUMPDEST DUP1 ISZERO PUSH2 0x1220 JUMPI PUSH2 0x1220 DUP5 DUP5 DUP4 PUSH2 0x1919 JUMP JUMPDEST POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1272 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x128C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1301 JUMPI PUSH2 0x12AE PUSH1 0x1 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x12C2 JUMPI POP PUSH2 0x12C0 PUSH1 0x2 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1301 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x134C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1364 DUP6 PUSH2 0x1AA1 JUMP JUMPDEST SWAP1 POP DUP4 PUSH4 0xFFFFFFFF AND DUP2 GT PUSH2 0x1379 JUMPI DUP1 PUSH2 0x1381 JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13AD JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13DA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH2 0x13EA DUP7 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1403 JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT JUMPDEST ISZERO PUSH2 0xB95 JUMPI DUP2 DUP6 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x141B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x1431 DUP8 DUP4 PUSH2 0x17FA JUMP JUMPDEST DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1443 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x1459 DUP8 DUP4 PUSH2 0x17DD JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x13EF JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x14A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x14BD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1702 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1532 JUMPI PUSH2 0x14DF PUSH1 0x1 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x14F3 JUMPI POP PUSH2 0x14F1 PUSH1 0x2 PUSH2 0x1AA1 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1532 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x157D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x15F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4944454E544943414C5F414444524553534553 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1614 JUMPI DUP4 PUSH2 0x1616 JUMP JUMPDEST DUP5 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1662 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A45524F5F41444452455353 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x16C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x16F0 JUMPI DUP1 DUP3 PUSH2 0x16F3 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1751 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x186B JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP4 MSTORE PUSH1 0x10 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1829 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x188F JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x188C JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x18D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x18EB DUP4 PUSH1 0x0 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x1913 JUMPI PUSH2 0x18FE DUP4 DUP3 PUSH2 0x17FA JUMP JUMPDEST DUP3 ADD SWAP2 POP PUSH2 0x190C DUP4 DUP3 PUSH2 0x17DD JUMP JUMPDEST SWAP1 POP PUSH2 0x18EE JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH25 0x7472616E7366657228616464726573732C75696E7432353629 PUSH1 0x38 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x19C2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19A3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1A24 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1A57 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1A57 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1A9A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH9 0xA190CA533713EB961D ADDMOD GAS 0xC9 0x2A PUSH25 0x7BB45E6B65391C158C7F706AD6FCAB081064736F6C63430005 LT STOP ORIGIN ",
          "sourceMap": "277:16457:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;277:16457:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;848:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;848:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16521:210;;;:::i;:::-;;;;-1:-1:-1;;;;;16521:210:1;;;;;;;;;;;;;;;;;;;;;;;;15221:299;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15221:299:1;;:::i;:::-;;1348:25;;;:::i;:::-;;;;-1:-1:-1;;;;;1348:25:1;;;;;;;;;;;;;;1833:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1833:42:1;;:::i;:::-;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1408:23;;;:::i;:::-;;;;;;;;;;;;;;;;12724:467;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12724:467:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12724:467:1;;;;;;;;;;;;;;;;;1571:27;;;:::i;14866:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14866:318:1;;:::i;5806:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5806:130:1;-1:-1:-1;;;;;5806:130:1;;:::i;11585:1111::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11585:1111:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;1936:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1936:44:1;;;;;;;;:::i;1089:21::-;;;:::i;5944:306::-;;;:::i;1149:21::-;;;:::i;2829:967::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2829:967:1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;980:19::-;;;:::i;6258:132::-;;;:::i;932:22::-;;;:::i;1297:24::-;;;:::i;15599:914::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15599:914:1;;;;;;;;;;:::i;1245:23::-;;;:::i;14023:350::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14023:350:1;;:::i;10845:691::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10845:691:1;;;;;;;;;:::i;14407:350::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14407:350:1;;:::i;1464:24::-;;;:::i;1717:26::-;;;:::i;848:49::-;;;;;;;;;;;;;;-1:-1:-1;;;848:49:1;;;;:::o;16521:210::-;16695:4;;16701:9;;16712:10;;16582:19;;;;16666:57;;-1:-1:-1;;;;;16695:4:1;;;;16701:9;;;;16712:10;16666:28;:57::i;:::-;16636:87;;;;-1:-1:-1;16521:210:1;-1:-1:-1;16521:210:1:o;15221:299::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15348:7;;15322:34;;-1:-1:-1;;;;;15348:7:1;15322:25;:34::i;:::-;-1:-1:-1;;;;;15308:48:1;:10;-1:-1:-1;;;;;15308:48:1;;15300:70;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;;;;15410:3;15389:17;:24;;15381:53;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;;;;15478:14;:34;5594:1;5583:8;:12;15221:299::o;1348:25::-;;;-1:-1:-1;;;;;1348:25:1;;:::o;1833:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;:::o;1408:23::-;;;;:::o;12724:467::-;12852:13;;;12863:1;12852:13;;;;;;;;;12813:19;;12852:13;;;17:15:-1;;105:10;12852:13:1;88:34:-1;136:17;;-1:-1;12852:13:1;12844:21;;12876:14;;:::i;:::-;-1:-1:-1;12893:21:1;;;;:12;:21;;;;;;;;12876:38;;;;;;;;;-1:-1:-1;;;;;12876:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12925:8;;12876:38;;12925:5;;:8;;;;;;;;;:26;;;;;12980:1;:4;;;-1:-1:-1;;;;;12973:12:1;12962:5;12968:1;12962:8;;;;;;;;;;;;;:23;;;;;13007:1;:9;;;12996:5;13002:1;12996:8;;;;;;;;;;;;;:20;;;;;13038:1;:7;;;13027:5;13033:1;13027:8;;;;;;;;;;;;;:18;;;;;13067:1;:13;;;13056:5;13062:1;13056:8;;;;;;;;;;;;;:24;;;;;13102:1;:14;;;13091:5;13097:1;13091:8;;;;;;;;;;;;;:25;;;;;13138:1;:11;;;13127:5;13133:1;13127:8;;;;;;;;;;;;;:22;;;;;13171:1;:12;;;13160:5;13166:1;13160:8;;;;;;;;;;;;;:23;;;;;12724:467;;;;:::o;1571:27::-;;;;:::o;14866:318::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14995:7;;14969:34;;-1:-1:-1;;;;;14995:7:1;14969:25;:34::i;:::-;-1:-1:-1;;;;;14955:48:1;:10;-1:-1:-1;;;;;14955:48:1;;14947:83;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;;;;15071:2;15049:18;:24;;15041:53;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;;;;15140:15;:36;5594:1;5583:8;:12;14866:318::o;5806:130::-;-1:-1:-1;;;;;5912:16:1;;;;;;:10;:16;;;;;;;;;5901:27;;;;;;;;;;;;;;;;;5866:22;;5901:27;;;5912:16;5901:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:130;;;:::o;11585:1111::-;11670:20;11692:21;11726:13;11742:23;11752:9;11763:1;11742:9;:23::i;:::-;11726:39;;11776:16;89:1:4;11807:9:1;:22;11803:422;;;11846:149;11852:13;;;;;:34;;;11881:5;11869:8;:17;;11852:34;11846:149;;;11917:30;11927:9;11938:8;11917:9;:30::i;:::-;11906:41;-1:-1:-1;11966:13:1;;11846:149;;;11803:422;;;133:1:4;12025:9:1;:23;12021:204;;;12065:149;12071:13;;;;;:34;;;12100:5;12088:8;:17;;12071:34;12065:149;;;12136:30;12146:9;12157:8;12136:9;:30::i;:::-;12125:41;-1:-1:-1;12185:13:1;;12065:149;;;12241:15;;12237:452;;12293:11;12282:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12282:23:1;;12273:32;;12341:11;12330:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12330:23:1;;12320:33;;12379:23;12389:9;12400:1;12379:9;:23::i;:::-;12368:34;;12417:10;12442:236;12456:11;12448:5;:19;12442:236;;;12504:8;12488:6;12495:5;12488:13;;;;;;;;;;;;;:24;;;;;12548:28;12556:9;12567:8;12548:7;:28::i;:::-;12531:7;12539:5;12531:14;;;;;;;;;;;;;:45;;;;;12606:30;12616:9;12627:8;12606:9;:30::i;:::-;12595:41;-1:-1:-1;12655:7:1;;12442:236;;;12237:452;;11585:1111;;;;;;;:::o;1936:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1089:21::-;;;;:::o;5944:306::-;6098:4;;6104:9;;6115:10;;6000;;;;;;6069:57;;-1:-1:-1;;;;;6098:4:1;;;;6104:9;;;6115:10;6069:28;:57::i;:::-;6023:103;;;;6141:11;-1:-1:-1;;;;;6141:16:1;6156:1;6141:16;6137:106;;6220:11;-1:-1:-1;;;;;6182:49:1;:35;6205:11;;6199:2;:17;6182:12;-1:-1:-1;;;;;6182:16:1;;;:35;;;;:::i;:::-;:49;;;;;;6174:57;;6137:106;5944:306;;;:::o;1149:21::-;;;;:::o;2829:967::-;3032:7;;-1:-1:-1;;;;;3032:7:1;3018:10;:21;3010:43;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;;;;3106:1;3092:10;:15;;3084:46;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;;;;3163:1;3149:10;:15;;3141:46;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;;;;3199:14;3215;3249:5;-1:-1:-1;;;;;3234:28:1;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3234:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3234:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3234:30:1;3266;;;-1:-1:-1;;;3266:30:1;;;;-1:-1:-1;;;;;3266:28:1;;;;;:30;;;;;3234;;3266;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;3266:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3266:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3266:30:1;3198:99;;-1:-1:-1;3266:30:1;-1:-1:-1;;;;;;3331:20:1;;;;;;;:45;;;;;3365:11;-1:-1:-1;;;;;3355:21:1;:6;-1:-1:-1;;;;;3355:21:1;;3331:45;3330:111;;;;3405:10;-1:-1:-1;;;;;3395:20:1;:6;-1:-1:-1;;;;;3395:20:1;;:45;;;;;3429:11;-1:-1:-1;;;;;3419:21:1;:6;-1:-1:-1;;;;;3419:21:1;;3395:45;3308:169;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;;;;3490:4;:12;;-1:-1:-1;;;;;3490:12:1;;;-1:-1:-1;;;;;;3490:12:1;;;;;;;3513:9;:22;;;;;;;;;;;;;3546:10;:24;;;;;;;;;;;;;;;3581:9;:22;;;3628:29;;;-1:-1:-1;;;3628:29:1;;;;:27;;-1:-1:-1;3628:29:1;;;;;;;;;;;;;;3513:22;3628:29;;;5:2:-1;;;;30:1;27;20:12;5:2;3628:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3628:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3628:29:1;3614:43;;:11;:43;-1:-1:-1;;3668:9:1;:22;-1:-1:-1;;3719:2:1;3701:15;:20;-1:-1:-1;;3761:2:1;3744:14;:19;2829:967::o;980:19::-;;;-1:-1:-1;;;;;980:19:1;;:::o;6258:132::-;6360:10;;6353:29;;;-1:-1:-1;;;6353:29:1;;;;6318:12;;-1:-1:-1;;;;;6360:10:1;;6353:27;;:29;;;;;;;;;;;;;;6360:10;6353:29;;;5:2:-1;;;;30:1;27;20:12;5:2;6353:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6353:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6353:29:1;6343:39;;;6258:132;-1:-1:-1;6258:132:1:o;932:22::-;;;-1:-1:-1;;;;;932:22:1;;:::o;1297:24::-;;;-1:-1:-1;;;;;1297:24:1;;:::o;15599:914::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15727:7;;15701:34;;-1:-1:-1;;;;;15727:7:1;15701:25;:34::i;:::-;-1:-1:-1;;;;;15687:48:1;:10;-1:-1:-1;;;;;15687:48:1;;15679:70;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;15764:19:1;;15760:179;;15821:21;15861:17;;15857:49;;15880:26;;-1:-1:-1;;;;;15880:11:1;;;:26;;;;;15892:13;;15880:26;;;;15892:13;15880:11;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15880:26:1;15857:49;15921:7;;;15760:179;15966:38;;;-1:-1:-1;;;15966:38:1;;15998:4;15966:38;;;;;;15951:12;;-1:-1:-1;;;;;15966:23:1;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;15966:38:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15966:38:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15966:38:1;16067:9;;15966:38;;-1:-1:-1;15966:38:1;;-1:-1:-1;;;;;16058:18:1;;;16067:9;;16058:18;16054:377;;;16093:17;16113:28;133:1:4;16113:16:1;:28::i;:::-;16093:48;;16182:12;16172:7;:22;:51;;16222:1;16172:51;;;16207:12;16197:7;:22;16172:51;16156:67;;16054:377;;;;16263:10;;-1:-1:-1;;;;;16254:19:1;;;16263:10;;16254:19;16250:181;;;16290:17;16310:27;89:1:4;16310:16:1;:27::i;:::-;16290:47;;16378:12;16368:7;:22;:51;;16418:1;16368:51;;;16403:12;16393:7;:22;16368:51;16352:67;;16250:181;;16447:17;;16443:62;;16466:39;16480:5;16487:2;16491:13;16466;:39::i;:::-;5571:1;;;-1:-1:-1;;5594:1:1;5583:8;:12;15599:914::o;1245:23::-;;;;:::o;14023:350::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14136:7;;14110:34;;-1:-1:-1;;;;;14136:7:1;14110:25;:34::i;:::-;-1:-1:-1;;;;;14096:48:1;:10;-1:-1:-1;;;;;14096:48:1;;14092:180;;14168:22;89:1:4;14168:11:1;:22::i;:::-;:27;:59;;;;;14199:23;133:1:4;14199:11:1;:23::i;:::-;:28;14168:59;14160:100;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;;;;14306:1;14290:12;:17;;14282:48;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;;;;14341:9;:24;5594:1;5583:8;:12;14023:350::o;10845:691::-;10954:20;10976:21;11010:16;11029:22;11041:9;11029:11;:22::i;:::-;11010:41;;11091:7;11077:21;;:11;:21;:45;;11111:11;11077:45;;;11101:7;11077:45;;;11062:60;;11153:11;11142:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11142:23:1;;11133:32;;11197:11;11186:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11186:23:1;;11176:33;;11220:13;11236:23;11246:9;11257:1;11236:9;:23::i;:::-;11220:39;-1:-1:-1;11270:12:1;11297:232;11303:13;;;;;:36;;;11328:11;11320:5;:19;;;11303:36;11297:232;;;11371:8;11355:6;11362:5;11355:13;;;;;;;;;;;;;;;:24;;;;;11411:28;11419:9;11430:8;11411:7;:28::i;:::-;11394:7;11402:5;11394:14;;;;;;;;;;;;;;;:45;;;;;11465:30;11475:9;11486:8;11465:9;:30::i;:::-;11454:41;-1:-1:-1;11510:7:1;;11297:232;;14407:350;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14520:7;;14494:34;;-1:-1:-1;;;;;14520:7:1;14494:25;:34::i;:::-;-1:-1:-1;;;;;14480:48:1;:10;-1:-1:-1;;;;;14480:48:1;;14476:180;;14552:22;89:1:4;14552:11:1;:22::i;:::-;:27;:59;;;;;14583:23;133:1:4;14583:11:1;:23::i;:::-;:28;14552:59;14544:100;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;;;;14690:1;14674:12;:17;;14666:48;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;;;;14725:9;:24;5594:1;5583:8;:12;14407:350::o;1464:24::-;;;;:::o;1717:26::-;;;;:::o;2899:496:13:-;2994:16;3012;3059:6;-1:-1:-1;;;;;3049:16:13;:6;-1:-1:-1;;;;;3049:16:13;;;3041:48;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;;;;3100:14;3126:6;-1:-1:-1;;;;;3117:15:13;:6;-1:-1:-1;;;;;3117:15:13;;:33;;3144:6;3117:33;;;3135:6;3117:33;3100:50;-1:-1:-1;;;;;;3169:20:13;;3161:45;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;;;;3218:16;3236;3272:4;-1:-1:-1;;;;;3257:32:13;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3257:34:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3257:34:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3257:34:13;;;;;;;;;-1:-1:-1;3257:34:13;-1:-1:-1;;;;;;3325:16:13;;;;;;;:62;;3368:8;3378;3325:62;;;3345:8;3355;3325:62;3302:85;;;;-1:-1:-1;2899:496:13;-1:-1:-1;;;;;;;2899:496:13:o;685:166::-;743:13;812:7;-1:-1:-1;;;;;794:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;794:40:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;794:40:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;794:40:13;776:67;;;-1:-1:-1;;;776:67:13;;;;-1:-1:-1;;;;;776:65:13;;;;;;:67;;;;;794:40;;776:67;;;;;;;;:65;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;776:67:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;776:67:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;776:67:13;;685:166;-1:-1:-1;;685:166:13:o;2779:231:4:-;2935:9;2964:33;;;:22;:33;;;;;;;;:38;;;;;;;;;;2779:231::o;10051:385:1:-;10153:12;10205:31;;;:20;:31;;;;;;;;:38;;;;;;;;;10245:30;;;:19;:30;;;;;:37;;;;;;;;;10205:38;10294:135;10315:4;10313:1;:6;10294:135;;;10351:53;10364:29;;;;;;;;;;;:36;;;;;;;;:39;;;;;;;;;10351:53;;:12;:53;;;;;:66;;;10340:77;;;;;10321:3;;10294:135;;;;10051:385;;;;;;:::o;433:142:14:-;485:6;512;;;:30;;-1:-1:-1;;527:5:14;;;541:1;536;527:5;536:1;522:15;;;;;:20;512:30;504:63;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;;;;433:142;;;;:::o;10465:307:1:-;10545:11;10574:13;10590:23;10600:9;10611:1;10590:9;:23::i;:::-;10574:39;;10624:141;10630:13;;10624:141;;10669:28;10677:9;10688:8;10669:7;:28::i;:::-;10659:38;;;;10723:30;10733:9;10744:8;10723:9;:30::i;:::-;10712:41;;10624:141;;;10465:307;;;;:::o;4279:291::-;789:34;;;;;;;;;;;-1:-1:-1;;;789:34:1;;;;;4413:52;;-1:-1:-1;;;;;4413:52:1;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4413:52:1;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;4402:64:1;;;;4367:12;;4381:17;;4402:10;;;4413:52;4402:64;;;25:18:-1;4402:64:1;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4402:64:1;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;4366:100:1;;;;4485:7;:57;;;;-1:-1:-1;4497:11:1;;:16;;:44;;;4528:4;4517:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4517:24:1;4497:44;4477:85;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;;;;4279:291;;;;;:::o;556:183:4:-;641:21;694:37;;;:26;:37;;;;;;;556:183::o;277:16457:1:-;;;;;;;;;;-1:-1:-1;;;;;277:16457:1;;;;;;-1:-1:-1;;;;;277:16457:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountRemain\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountRemain\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderUpdate\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseDecimal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserveBase\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserveQuote\",\"type\":\"uint112\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserOrders\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"orderIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_priceStep\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"direction\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxSize\",\"type\":\"uint32\"}],\"name\":\"marketBook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"marketOrder\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"order\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"marketOrders\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOffer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountRemain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"orderType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"orderIndex\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMinAmount\",\"type\":\"uint256\"}],\"name\":\"minAmountUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceDecimal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"decimal\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceStep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPriceStep\",\"type\":\"uint256\"}],\"name\":\"priceStepUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"protocolFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolFeeRate\",\"type\":\"uint256\"}],\"name\":\"protocolFeeRateUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"quoteBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"quoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"direction\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"rangeBook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"safeRefund\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"subsidyFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSubsidyFeeRate\",\"type\":\"uint256\"}],\"name\":\"subsidyFeeRateUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"userOrders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/OrderBookBase.sol\":\"OrderBookBase\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/OrderBookBase.sol\":{\"keccak256\":\"0xd0b4c994c9dcf3dede743375df588228da108bb06a90c6082aecd4b1ea26d27d\",\"urls\":[\"bzz-raw://87b8b068299afd3df1ace44241f532b77a8c1070d239ce1c3333d50dd73d9225\",\"dweb:/ipfs/QmYKqbUDHqZP6yUmDw9TqGiG2xZeTLjnuXjJcyJpEohPSs\"]},\"contracts/OrderQueue.sol\":{\"keccak256\":\"0xff95f47ee4f3cbbe23fb7053e0c37f0b5a1c7956c4bb02a485e45f2af18f71e0\",\"urls\":[\"bzz-raw://b8c4b29969132a3d23e39d7714e2fb67f24fbd2228814dec6bcb5c804b60d47d\",\"dweb:/ipfs/Qmd3yArMBcUAd91LBGA3yahwdQWRcMSpvMP3kwg7haFkzr\"]},\"contracts/PriceList.sol\":{\"keccak256\":\"0x6fd878052bb8499a721cae3d9e3d8f865bb276c62b438cb6d3f2af6f34888fad\",\"urls\":[\"bzz-raw://17010905206b30d535c293c05e0530e7ffdb3667f7c5a927138b67ad470cf813\",\"dweb:/ipfs/QmXXxxKz9YRc9tLiaSA3QnM8sGccFMgYH9G8ScxMTJgbTZ\"]},\"contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xa791b279660ee5eb66ebd4f23b539055d178ae24677f3a164567441ecfdcf73a\",\"urls\":[\"bzz-raw://06f36f585a8b82eb388ccccc4e8c483718a99a07f5f12d3217afc254ab139a68\",\"dweb:/ipfs/Qmedr3aAH6F3ZTgZJ3enoP92ZD8yNwiCStwtGknNXhiK8v\"]},\"contracts/interfaces/IOrderBook.sol\":{\"keccak256\":\"0x88c44365451e69c40779ed92c98b683b8d8e2b1689ffe4c2d388faf476fe1314\",\"urls\":[\"bzz-raw://5d1f23ba83fb1960400c70362b5f0bcae2fb26d8c8d581a9b8164d8d91fdb325\",\"dweb:/ipfs/QmTY1cYugvuWb5VinnxQZkLgRTZ9yXFs6ivk2obwvzrNGJ\"]},\"contracts/interfaces/IOrderBookFactory.sol\":{\"keccak256\":\"0x35de3f95ee0847aaf2a398e43acaa993f3f38ec89a02546993a338418c14276f\",\"urls\":[\"bzz-raw://6b87e84de0469baa8c646769d164ae4241311ddb36d61f495e0ef3233d9e41f4\",\"dweb:/ipfs/QmYMBYbH6zPLzfnf43wiyBftSuzpPAwAz1cVQBm7qpsMmU\"]},\"contracts/interfaces/IUniswapV2Factory.sol\":{\"keccak256\":\"0x7b2a8203923ba2af5ec2ea54f655ac40fc32c9bc5b00ed01058326fc212763c4\",\"urls\":[\"bzz-raw://72d5966709eec21964685c47b8ee017e22ae9f616b516e77f0754259d01690ec\",\"dweb:/ipfs/QmS4gyruWoRR3Ab2enF9omwpmFXcZXSB3c9azNRM7cYNop\"]},\"contracts/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x581f0f810f88942f26211b503fdabb786826abb59741624cf985c09ee6a76e03\",\"urls\":[\"bzz-raw://d7b6d788a4524585bdfb8b6a7213d46284a81f896e011143b2acacbbd5c7a1e0\",\"dweb:/ipfs/QmayLfvKFDQQAEbK2zyfoe3KDz9EdH8nnwVYqTDbvCtncA\"]},\"contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0x25ed8b4dd0b9382d61501d7fe6f30ea65e6800907ba4a5a0f280e79c80bdfd86\",\"urls\":[\"bzz-raw://72c047f1ad25724c269cfb87f9291558a2723d90ef8b25224caf84e04123a52f\",\"dweb:/ipfs/QmXjW9nmRTasWKYGMnQRBGRHJg2AbT6Z4azWowuST1bLu3\"]},\"contracts/libraries/Math.sol\":{\"keccak256\":\"0xccbb532d91028652fd3b3df3ae1b02ba0ab62af320270c702587816501e6d219\",\"urls\":[\"bzz-raw://49e097b670fa636d85b6da78f645462d33b1d9f334a290e70ff76a1705e08877\",\"dweb:/ipfs/QmTywL9AbXJMHoYsiyyUdftnc4hig4y2srNJifgCHth3LH\"]},\"contracts/libraries/OrderBookLibrary.sol\":{\"keccak256\":\"0x4b636198fcc43ea259db9c255f2c479e67cda5b79144d425f3f12bd337bd7bc3\",\"urls\":[\"bzz-raw://cfda742ee6730d24dfbe5b76cab91ce06ffdf0f451e8a8cc7b29bb87fbbda277\",\"dweb:/ipfs/QmVqyAAsVmPGq7AqCuxeWKRFDVfgGKhw7t5MPvTL1onJwi\"]},\"contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x2ec47d2360eaf97d08df4e022201f5ab70e1e1feeb2b7da46b43fab649898a39\",\"urls\":[\"bzz-raw://56be45e5cc62e8e48567ada0407699c2826665359eed633da14d00f67efd95bc\",\"dweb:/ipfs/QmXrXoZ9Ho8SdWjXC2BEzDiDVURPTTzBXiqfcPnQsg1GSB\"]},\"contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x43ca45ce883d480bab2394b7cc50633c713a5bf77496fe55e0dd1373b4cbddf8\",\"urls\":[\"bzz-raw://a86702c285ff5a32f3195bab61af9a0e78f44423d737a9f904cd3077e018f344\",\"dweb:/ipfs/QmZTWpAZXzDaNjdLTMHduK97KNvv2uCWXoeb7nXitv3PLZ\"]},\"contracts/libraries/UQ112x112.sol\":{\"keccak256\":\"0x394bda0ad101756150be3737eb405eec14da4bd756e8a65f5a110f73565f5dcd\",\"urls\":[\"bzz-raw://c0b40cd3cf66546fb5854ee374aa2a40e6103a2b2616cee3c27ce80dcb76d5bf\",\"dweb:/ipfs/QmfURbSAc6ZTekkrfGdkCqv6bU27dfnbVKgSDqHHavGCae\"]}},\"version\":1}",
      "interface": [
        {
          "inputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCanceled",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderClosed",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderCreated",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amountUsed",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderUpdate",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "factory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserveBase",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserveQuote",
              "type": "uint112"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "name": "getUserOrders",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "orderIds",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "_pair",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "_priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_minAmount",
              "type": "uint256"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "maxSize",
              "type": "uint32"
            }
          ],
          "name": "marketBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "marketOrder",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "order",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "marketOrders",
          "outputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOffer",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountRemain",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderType",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "orderIndex",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "minAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newMinAmount",
              "type": "uint256"
            }
          ],
          "name": "minAmountUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pair",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "decimal",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceStep",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newPriceStep",
              "type": "uint256"
            }
          ],
          "name": "priceStepUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "protocolFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newProtocolFeeRate",
              "type": "uint256"
            }
          ],
          "name": "protocolFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteBalance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "name": "rangeBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address payable",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "safeRefund",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "subsidyFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newSubsidyFeeRate",
              "type": "uint256"
            }
          ],
          "name": "subsidyFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "userOrders",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "bytecode": "6080604052600160125534801561001557600080fd5b50600580546001600160a01b03191633179055611b3f806100376000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e5780630902f1ac146101cb57806319eda4bc146101f9578063217a4b7014610218578063346970f91461023c57806338bde791146102a6578063573dd9db146102c057806358f858801461032d5780636069f0801461033557806363c69f08146103525780637de81d8b14610378578063856652e91461043457806388d519c41461046057806398d5fdca146104685780639b2cb5d814610470578063a6b63eb814610478578063a8aa1b31146104ba578063bc9113f0146104c2578063c45a0155146104ca578063c55dae63146104d2578063cb160866146104da578063db7b373e14610508578063deb65ac314610510578063e52fa98b1461052d578063f1564c0b14610556578063f1a2e84914610573578063f361df081461057b575b600080fd5b610156610583565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610190578181015183820152602001610178565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d36105b0565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b6102166004803603602081101561020f57600080fd5b50356105e1565b005b6102206106df565b604080516001600160a01b039092168252519081900360200190f35b6102596004803603602081101561025257600080fd5b50356106ee565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b6102ae61073e565b60408051918252519081900360200190f35b6102dd600480360360208110156102d657600080fd5b5035610744565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610319578181015183820152602001610301565b505050509050019250505060405180910390f35b6102ae6108e1565b6102166004803603602081101561034b57600080fd5b50356108e7565b6102dd6004803603602081101561036857600080fd5b50356001600160a01b03166109e5565b61039b6004803603604081101561038e57600080fd5b5080359060200135610a51565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103df5781810151838201526020016103c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561041e578181015183820152602001610406565b5050505090500194505050505060405180910390f35b6102ae6004803603604081101561044a57600080fd5b506001600160a01b038135169060200135610ba0565b6102ae610bce565b6102ae610bd4565b6102ae610c4d565b610216600480360360a081101561048e57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610c53565b610220610f78565b6102ae610f87565b610220611000565b61022061100f565b610216600480360360408110156104f057600080fd5b506001600160a01b038135811691602001351661101e565b6102ae61122c565b6102166004803603602081101561052657600080fd5b5035611232565b61039b6004803603604081101561054357600080fd5b508035906020013563ffffffff16611356565b6102166004803603602081101561056c57600080fd5b5035611463565b6102ae611587565b6102ae61158d565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b5460009283926105d8926001600160a01b03928316929182169116611593565b90939092509050565b601254600114610621576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461063b906001600160a01b0316611702565b6001600160a01b0316336001600160a01b03161461068c576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b60648111156106d5576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610771611ab3565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e08201528351909284916107f457fe5b60200260200101818152505080602001516001600160a01b03168260018151811061081b57fe5b60200260200101818152505080604001518260028151811061083957fe5b60200260200101818152505080606001518260038151811061085757fe5b60200260200101818152505080608001518260048151811061087557fe5b6020026020010181815250508060a001518260058151811061089357fe5b6020026020010181815250508060c00151826006815181106108b157fe5b6020026020010181815250508060e00151826007815181106108cf57fe5b60200260200101818152505050919050565b600e5481565b601254600114610927576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610941906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614610992576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e8111156109db576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b038116600090815260116020908152604091829020805483518184028101840190945280845260609392830182828015610a4557602002820191906000526020600020905b815481526020019060010190808311610a31575b50505050509050919050565b6060806000610a618560006117dd565b905060006001861415610a9c575b8115801590610a7e5750848210155b15610a9757610a8d86836117dd565b9150600101610a6f565b610ace565b6002861415610ace575b8115801590610ab55750848211155b15610ace57610ac486836117dd565b9150600101610aa6565b8015610b975780604051908082528060200260200182016040528015610afe578160200160208202803883390190505b50935080604051908082528060200260200182016040528015610b2b578160200160208202803883390190505b509250610b398660006117dd565b915060005b81811015610b955782858281518110610b5357fe5b602002602001018181525050610b6987846117fa565b848281518110610b7557fe5b602002602001018181525050610b8b87846117dd565b9250600101610b3e565b505b50509250929050565b60116020528160005260406000208181548110610bb957fe5b90600052602060002001600091509150505481565b60075481565b600654600a54600b5460009283928392610bfd926001600160a01b039081169281169116611593565b91509150816001600160701b0316600014610c4857816001600160701b0316610c3d600954600a0a836001600160701b031661187490919063ffffffff16565b81610c4457fe5b0492505b505090565b60085481565b6005546001600160a01b03163314610c9e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015610ce9576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015610d34576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b158015610ddc57600080fd5b505afa158015610df0573d6000803e3d6000fd5b505050506040513d6020811015610e0657600080fd5b505190925090506001600160a01b03808316908716148015610e395750846001600160a01b0316816001600160a01b0316145b80610e715750856001600160a01b0316816001600160a01b0316148015610e715750846001600160a01b0316826001600160a01b0316145b610eb7576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015610f3157600080fd5b505afa158015610f45573d6000803e3d6000fd5b505050506040513d6020811015610f5b57600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b505160ff16919050565b6005546001600160a01b031681565b600a546001600160a01b031681565b60125460011461105e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611078906001600160a01b0316611702565b6001600160a01b0316336001600160a01b0316146110c9576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b03821661111c57478015611116576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611114573d6000803e3d6000fd5b505b50611223565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561116657600080fd5b505afa15801561117a573d6000803e3d6000fd5b505050506040513d602081101561119057600080fd5b5051600a5490915081906001600160a01b03858116911614156111d55760006111b960026118dd565b90508083116111c95760006111cd565b8083035b91505061120f565b600b546001600160a01b038581169116141561120f5760006111f760016118dd565b905080831161120757600061120b565b8083035b9150505b801561122057611220848483611919565b50505b50506001601255565b60095481565b601254600114611272576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461128c906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611301576112ae6001611aa1565b1580156112c257506112c06002611aa1565b155b611301576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561134c576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b606080600061136485611aa1565b90508363ffffffff1681116113795780611381565b8363ffffffff165b9050806040519080825280602002602001820160405280156113ad578160200160208202803883390190505b509250806040519080825280602002602001820160405280156113da578160200160208202803883390190505b50915060006113ea8660006117dd565b905060005b81158015906114035750828163ffffffff16105b15610b955781858263ffffffff168151811061141b57fe5b60200260200101818152505061143187836117fa565b848263ffffffff168151811061144357fe5b60200260200101818152505061145987836117dd565b91506001016113ef565b6012546001146114a3576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546114bd906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611532576114df6001611aa1565b1580156114f357506114f16002611aa1565b155b611532576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561157d576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b031614156115f3576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106116145783611616565b845b90506001600160a01b038116611662576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60608110156116c857600080fd5b50805160209091015190925090506001600160a01b03878116908416146116f05780826116f3565b81815b90999098509650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b8181101561186b576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101611829565b50505092915050565b600081158061188f5750508082028282828161188c57fe5b04145b6118d7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b6000806118eb8360006117dd565b90505b8015611913576118fe83826117fa565b8201915061190c83826117dd565b90506118ee565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119c25780518252601f1990920191602091820191016119a3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611a24576040519150601f19603f3d011682016040523d82523d6000602084013e611a29565b606091505b5091509150818015611a57575080511580611a575750808060200190516020811015611a5457600080fd5b50515b611a9a576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a7231582068a190ca533713eb961d085ac92a787bb45e6b65391c158c7f706ad6fcab081064736f6c63430005100032",
      "bin": "6080604052600160125534801561001557600080fd5b50600580546001600160a01b03191633179055611b3f806100376000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e5780630902f1ac146101cb57806319eda4bc146101f9578063217a4b7014610218578063346970f91461023c57806338bde791146102a6578063573dd9db146102c057806358f858801461032d5780636069f0801461033557806363c69f08146103525780637de81d8b14610378578063856652e91461043457806388d519c41461046057806398d5fdca146104685780639b2cb5d814610470578063a6b63eb814610478578063a8aa1b31146104ba578063bc9113f0146104c2578063c45a0155146104ca578063c55dae63146104d2578063cb160866146104da578063db7b373e14610508578063deb65ac314610510578063e52fa98b1461052d578063f1564c0b14610556578063f1a2e84914610573578063f361df081461057b575b600080fd5b610156610583565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610190578181015183820152602001610178565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d36105b0565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b6102166004803603602081101561020f57600080fd5b50356105e1565b005b6102206106df565b604080516001600160a01b039092168252519081900360200190f35b6102596004803603602081101561025257600080fd5b50356106ee565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b6102ae61073e565b60408051918252519081900360200190f35b6102dd600480360360208110156102d657600080fd5b5035610744565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610319578181015183820152602001610301565b505050509050019250505060405180910390f35b6102ae6108e1565b6102166004803603602081101561034b57600080fd5b50356108e7565b6102dd6004803603602081101561036857600080fd5b50356001600160a01b03166109e5565b61039b6004803603604081101561038e57600080fd5b5080359060200135610a51565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103df5781810151838201526020016103c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561041e578181015183820152602001610406565b5050505090500194505050505060405180910390f35b6102ae6004803603604081101561044a57600080fd5b506001600160a01b038135169060200135610ba0565b6102ae610bce565b6102ae610bd4565b6102ae610c4d565b610216600480360360a081101561048e57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610c53565b610220610f78565b6102ae610f87565b610220611000565b61022061100f565b610216600480360360408110156104f057600080fd5b506001600160a01b038135811691602001351661101e565b6102ae61122c565b6102166004803603602081101561052657600080fd5b5035611232565b61039b6004803603604081101561054357600080fd5b508035906020013563ffffffff16611356565b6102166004803603602081101561056c57600080fd5b5035611463565b6102ae611587565b6102ae61158d565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b5460009283926105d8926001600160a01b03928316929182169116611593565b90939092509050565b601254600114610621576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461063b906001600160a01b0316611702565b6001600160a01b0316336001600160a01b03161461068c576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b60648111156106d5576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610771611ab3565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e08201528351909284916107f457fe5b60200260200101818152505080602001516001600160a01b03168260018151811061081b57fe5b60200260200101818152505080604001518260028151811061083957fe5b60200260200101818152505080606001518260038151811061085757fe5b60200260200101818152505080608001518260048151811061087557fe5b6020026020010181815250508060a001518260058151811061089357fe5b6020026020010181815250508060c00151826006815181106108b157fe5b6020026020010181815250508060e00151826007815181106108cf57fe5b60200260200101818152505050919050565b600e5481565b601254600114610927576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610941906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614610992576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e8111156109db576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b038116600090815260116020908152604091829020805483518184028101840190945280845260609392830182828015610a4557602002820191906000526020600020905b815481526020019060010190808311610a31575b50505050509050919050565b6060806000610a618560006117dd565b905060006001861415610a9c575b8115801590610a7e5750848210155b15610a9757610a8d86836117dd565b9150600101610a6f565b610ace565b6002861415610ace575b8115801590610ab55750848211155b15610ace57610ac486836117dd565b9150600101610aa6565b8015610b975780604051908082528060200260200182016040528015610afe578160200160208202803883390190505b50935080604051908082528060200260200182016040528015610b2b578160200160208202803883390190505b509250610b398660006117dd565b915060005b81811015610b955782858281518110610b5357fe5b602002602001018181525050610b6987846117fa565b848281518110610b7557fe5b602002602001018181525050610b8b87846117dd565b9250600101610b3e565b505b50509250929050565b60116020528160005260406000208181548110610bb957fe5b90600052602060002001600091509150505481565b60075481565b600654600a54600b5460009283928392610bfd926001600160a01b039081169281169116611593565b91509150816001600160701b0316600014610c4857816001600160701b0316610c3d600954600a0a836001600160701b031661187490919063ffffffff16565b81610c4457fe5b0492505b505090565b60085481565b6005546001600160a01b03163314610c9e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015610ce9576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015610d34576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b158015610ddc57600080fd5b505afa158015610df0573d6000803e3d6000fd5b505050506040513d6020811015610e0657600080fd5b505190925090506001600160a01b03808316908716148015610e395750846001600160a01b0316816001600160a01b0316145b80610e715750856001600160a01b0316816001600160a01b0316148015610e715750846001600160a01b0316826001600160a01b0316145b610eb7576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015610f3157600080fd5b505afa158015610f45573d6000803e3d6000fd5b505050506040513d6020811015610f5b57600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b505160ff16919050565b6005546001600160a01b031681565b600a546001600160a01b031681565b60125460011461105e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611078906001600160a01b0316611702565b6001600160a01b0316336001600160a01b0316146110c9576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b03821661111c57478015611116576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611114573d6000803e3d6000fd5b505b50611223565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561116657600080fd5b505afa15801561117a573d6000803e3d6000fd5b505050506040513d602081101561119057600080fd5b5051600a5490915081906001600160a01b03858116911614156111d55760006111b960026118dd565b90508083116111c95760006111cd565b8083035b91505061120f565b600b546001600160a01b038581169116141561120f5760006111f760016118dd565b905080831161120757600061120b565b8083035b9150505b801561122057611220848483611919565b50505b50506001601255565b60095481565b601254600114611272576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461128c906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611301576112ae6001611aa1565b1580156112c257506112c06002611aa1565b155b611301576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561134c576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b606080600061136485611aa1565b90508363ffffffff1681116113795780611381565b8363ffffffff165b9050806040519080825280602002602001820160405280156113ad578160200160208202803883390190505b509250806040519080825280602002602001820160405280156113da578160200160208202803883390190505b50915060006113ea8660006117dd565b905060005b81158015906114035750828163ffffffff16105b15610b955781858263ffffffff168151811061141b57fe5b60200260200101818152505061143187836117fa565b848263ffffffff168151811061144357fe5b60200260200101818152505061145987836117dd565b91506001016113ef565b6012546001146114a3576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546114bd906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611532576114df6001611aa1565b1580156114f357506114f16002611aa1565b155b611532576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561157d576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b031614156115f3576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106116145783611616565b845b90506001600160a01b038116611662576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60608110156116c857600080fd5b50805160209091015190925090506001600160a01b03878116908416146116f05780826116f3565b81815b90999098509650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b8181101561186b576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101611829565b50505092915050565b600081158061188f5750508082028282828161188c57fe5b04145b6118d7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b6000806118eb8360006117dd565b90505b8015611913576118fe83826117fa565b8201915061190c83826117dd565b90506118ee565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119c25780518252601f1990920191602091820191016119a3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611a24576040519150601f19603f3d011682016040523d82523d6000602084013e611a29565b606091505b5091509150818015611a57575080511580611a575750808060200190516020811015611a5457600080fd5b50515b611a9a576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a7231582068a190ca533713eb961d085ac92a787bb45e6b65391c158c7f706ad6fcab081064736f6c63430005100032",
      "bin-runtime": "608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e5780630902f1ac146101cb57806319eda4bc146101f9578063217a4b7014610218578063346970f91461023c57806338bde791146102a6578063573dd9db146102c057806358f858801461032d5780636069f0801461033557806363c69f08146103525780637de81d8b14610378578063856652e91461043457806388d519c41461046057806398d5fdca146104685780639b2cb5d814610470578063a6b63eb814610478578063a8aa1b31146104ba578063bc9113f0146104c2578063c45a0155146104ca578063c55dae63146104d2578063cb160866146104da578063db7b373e14610508578063deb65ac314610510578063e52fa98b1461052d578063f1564c0b14610556578063f1a2e84914610573578063f361df081461057b575b600080fd5b610156610583565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610190578181015183820152602001610178565b50505050905090810190601f1680156101bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d36105b0565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b6102166004803603602081101561020f57600080fd5b50356105e1565b005b6102206106df565b604080516001600160a01b039092168252519081900360200190f35b6102596004803603602081101561025257600080fd5b50356106ee565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b6102ae61073e565b60408051918252519081900360200190f35b6102dd600480360360208110156102d657600080fd5b5035610744565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610319578181015183820152602001610301565b505050509050019250505060405180910390f35b6102ae6108e1565b6102166004803603602081101561034b57600080fd5b50356108e7565b6102dd6004803603602081101561036857600080fd5b50356001600160a01b03166109e5565b61039b6004803603604081101561038e57600080fd5b5080359060200135610a51565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156103df5781810151838201526020016103c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561041e578181015183820152602001610406565b5050505090500194505050505060405180910390f35b6102ae6004803603604081101561044a57600080fd5b506001600160a01b038135169060200135610ba0565b6102ae610bce565b6102ae610bd4565b6102ae610c4d565b610216600480360360a081101561048e57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135610c53565b610220610f78565b6102ae610f87565b610220611000565b61022061100f565b610216600480360360408110156104f057600080fd5b506001600160a01b038135811691602001351661101e565b6102ae61122c565b6102166004803603602081101561052657600080fd5b5035611232565b61039b6004803603604081101561054357600080fd5b508035906020013563ffffffff16611356565b6102166004803603602081101561056c57600080fd5b5035611463565b6102ae611587565b6102ae61158d565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b5460009283926105d8926001600160a01b03928316929182169116611593565b90939092509050565b601254600114610621576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461063b906001600160a01b0316611702565b6001600160a01b0316336001600160a01b03161461068c576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b60648111156106d5576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610771611ab3565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e08201528351909284916107f457fe5b60200260200101818152505080602001516001600160a01b03168260018151811061081b57fe5b60200260200101818152505080604001518260028151811061083957fe5b60200260200101818152505080606001518260038151811061085757fe5b60200260200101818152505080608001518260048151811061087557fe5b6020026020010181815250508060a001518260058151811061089357fe5b6020026020010181815250508060c00151826006815181106108b157fe5b6020026020010181815250508060e00151826007815181106108cf57fe5b60200260200101818152505050919050565b600e5481565b601254600114610927576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610941906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614610992576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e8111156109db576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b038116600090815260116020908152604091829020805483518184028101840190945280845260609392830182828015610a4557602002820191906000526020600020905b815481526020019060010190808311610a31575b50505050509050919050565b6060806000610a618560006117dd565b905060006001861415610a9c575b8115801590610a7e5750848210155b15610a9757610a8d86836117dd565b9150600101610a6f565b610ace565b6002861415610ace575b8115801590610ab55750848211155b15610ace57610ac486836117dd565b9150600101610aa6565b8015610b975780604051908082528060200260200182016040528015610afe578160200160208202803883390190505b50935080604051908082528060200260200182016040528015610b2b578160200160208202803883390190505b509250610b398660006117dd565b915060005b81811015610b955782858281518110610b5357fe5b602002602001018181525050610b6987846117fa565b848281518110610b7557fe5b602002602001018181525050610b8b87846117dd565b9250600101610b3e565b505b50509250929050565b60116020528160005260406000208181548110610bb957fe5b90600052602060002001600091509150505481565b60075481565b600654600a54600b5460009283928392610bfd926001600160a01b039081169281169116611593565b91509150816001600160701b0316600014610c4857816001600160701b0316610c3d600954600a0a836001600160701b031661187490919063ffffffff16565b81610c4457fe5b0492505b505090565b60085481565b6005546001600160a01b03163314610c9e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015610ce9576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015610d34576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b158015610ddc57600080fd5b505afa158015610df0573d6000803e3d6000fd5b505050506040513d6020811015610e0657600080fd5b505190925090506001600160a01b03808316908716148015610e395750846001600160a01b0316816001600160a01b0316145b80610e715750856001600160a01b0316816001600160a01b0316148015610e715750846001600160a01b0316826001600160a01b0316145b610eb7576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015610f3157600080fd5b505afa158015610f45573d6000803e3d6000fd5b505050506040513d6020811015610f5b57600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015610fcc57600080fd5b505afa158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b505160ff16919050565b6005546001600160a01b031681565b600a546001600160a01b031681565b60125460011461105e576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611078906001600160a01b0316611702565b6001600160a01b0316336001600160a01b0316146110c9576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b03821661111c57478015611116576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611114573d6000803e3d6000fd5b505b50611223565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561116657600080fd5b505afa15801561117a573d6000803e3d6000fd5b505050506040513d602081101561119057600080fd5b5051600a5490915081906001600160a01b03858116911614156111d55760006111b960026118dd565b90508083116111c95760006111cd565b8083035b91505061120f565b600b546001600160a01b038581169116141561120f5760006111f760016118dd565b905080831161120757600061120b565b8083035b9150505b801561122057611220848483611919565b50505b50506001601255565b60095481565b601254600114611272576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125560055461128c906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611301576112ae6001611aa1565b1580156112c257506112c06002611aa1565b155b611301576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561134c576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b606080600061136485611aa1565b90508363ffffffff1681116113795780611381565b8363ffffffff165b9050806040519080825280602002602001820160405280156113ad578160200160208202803883390190505b509250806040519080825280602002602001820160405280156113da578160200160208202803883390190505b50915060006113ea8660006117dd565b905060005b81158015906114035750828163ffffffff16105b15610b955781858263ffffffff168151811061141b57fe5b60200260200101818152505061143187836117fa565b848263ffffffff168151811061144357fe5b60200260200101818152505061145987836117dd565b91506001016113ef565b6012546001146114a3576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546114bd906001600160a01b0316611702565b6001600160a01b0316336001600160a01b031614611532576114df6001611aa1565b1580156114f357506114f16002611aa1565b155b611532576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b600181101561157d576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b031614156115f3576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106116145783611616565b845b90506001600160a01b038116611662576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60608110156116c857600080fd5b50805160209091015190925090506001600160a01b03878116908416146116f05780826116f3565b81815b90999098509650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b8181101561186b576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101611829565b50505092915050565b600081158061188f5750508082028282828161188c57fe5b04145b6118d7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b6000806118eb8360006117dd565b90505b8015611913576118fe83826117fa565b8201915061190c83826117dd565b90506118ee565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119c25780518252601f1990920191602091820191016119a3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611a24576040519150601f19603f3d011682016040523d82523d6000602084013e611a29565b606091505b5091509150818015611a57575080511580611a575750808060200190516020811015611a5457600080fd5b50515b611a9a576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a7231582068a190ca533713eb961d085ac92a787bb45e6b65391c158c7f706ad6fcab081064736f6c63430005100032",
      "srcmap": "277:16457:1:-;;;5470:1;5446:25;;2704:60;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2736:7:1;:20;;-1:-1:-1;;;;;;2736:20:1;2746:10;2736:20;;;277:16457;;;;;;",
      "srcmap-runtime": "277:16457:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;277:16457:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;848:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;848:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16521:210;;;:::i;:::-;;;;-1:-1:-1;;;;;16521:210:1;;;;;;;;;;;;;;;;;;;;;;;;15221:299;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15221:299:1;;:::i;:::-;;1348:25;;;:::i;:::-;;;;-1:-1:-1;;;;;1348:25:1;;;;;;;;;;;;;;1833:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1833:42:1;;:::i;:::-;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1408:23;;;:::i;:::-;;;;;;;;;;;;;;;;12724:467;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12724:467:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12724:467:1;;;;;;;;;;;;;;;;;1571:27;;;:::i;14866:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14866:318:1;;:::i;5806:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5806:130:1;-1:-1:-1;;;;;5806:130:1;;:::i;11585:1111::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11585:1111:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11585:1111:1;;;;;;;;;;;;;;;;;;;1936:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1936:44:1;;;;;;;;:::i;1089:21::-;;;:::i;5944:306::-;;;:::i;1149:21::-;;;:::i;2829:967::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2829:967:1;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;980:19::-;;;:::i;6258:132::-;;;:::i;932:22::-;;;:::i;1297:24::-;;;:::i;15599:914::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15599:914:1;;;;;;;;;;:::i;1245:23::-;;;:::i;14023:350::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14023:350:1;;:::i;10845:691::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10845:691:1;;;;;;;;;:::i;14407:350::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14407:350:1;;:::i;1464:24::-;;;:::i;1717:26::-;;;:::i;848:49::-;;;;;;;;;;;;;;-1:-1:-1;;;848:49:1;;;;:::o;16521:210::-;16695:4;;16701:9;;16712:10;;16582:19;;;;16666:57;;-1:-1:-1;;;;;16695:4:1;;;;16701:9;;;;16712:10;16666:28;:57::i;:::-;16636:87;;;;-1:-1:-1;16521:210:1;-1:-1:-1;16521:210:1:o;15221:299::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15348:7;;15322:34;;-1:-1:-1;;;;;15348:7:1;15322:25;:34::i;:::-;-1:-1:-1;;;;;15308:48:1;:10;-1:-1:-1;;;;;15308:48:1;;15300:70;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;-1:-1:-1;;;15300:70:1;;;;;;;;;;;;;;;15410:3;15389:17;:24;;15381:53;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;-1:-1:-1;;;15381:53:1;;;;;;;;;;;;;;;15478:14;:34;5594:1;5583:8;:12;15221:299::o;1348:25::-;;;-1:-1:-1;;;;;1348:25:1;;:::o;1833:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1833:42:1;;;;;;;;;;;;;;;;;;:::o;1408:23::-;;;;:::o;12724:467::-;12852:13;;;12863:1;12852:13;;;;;;;;;12813:19;;12852:13;;;17:15:-1;;105:10;12852:13:1;88:34:-1;136:17;;-1:-1;12852:13:1;12844:21;;12876:14;;:::i;:::-;-1:-1:-1;12893:21:1;;;;:12;:21;;;;;;;;12876:38;;;;;;;;;-1:-1:-1;;;;;12876:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12925:8;;12876:38;;12925:5;;:8;;;;;;;;;:26;;;;;12980:1;:4;;;-1:-1:-1;;;;;12973:12:1;12962:5;12968:1;12962:8;;;;;;;;;;;;;:23;;;;;13007:1;:9;;;12996:5;13002:1;12996:8;;;;;;;;;;;;;:20;;;;;13038:1;:7;;;13027:5;13033:1;13027:8;;;;;;;;;;;;;:18;;;;;13067:1;:13;;;13056:5;13062:1;13056:8;;;;;;;;;;;;;:24;;;;;13102:1;:14;;;13091:5;13097:1;13091:8;;;;;;;;;;;;;:25;;;;;13138:1;:11;;;13127:5;13133:1;13127:8;;;;;;;;;;;;;:22;;;;;13171:1;:12;;;13160:5;13166:1;13160:8;;;;;;;;;;;;;:23;;;;;12724:467;;;;:::o;1571:27::-;;;;:::o;14866:318::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14995:7;;14969:34;;-1:-1:-1;;;;;14995:7:1;14969:25;:34::i;:::-;-1:-1:-1;;;;;14955:48:1;:10;-1:-1:-1;;;;;14955:48:1;;14947:83;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;-1:-1:-1;;;14947:83:1;;;;;;;;;;;;;;;15071:2;15049:18;:24;;15041:53;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;-1:-1:-1;;;15041:53:1;;;;;;;;;;;;;;;15140:15;:36;5594:1;5583:8;:12;14866:318::o;5806:130::-;-1:-1:-1;;;;;5912:16:1;;;;;;:10;:16;;;;;;;;;5901:27;;;;;;;;;;;;;;;;;5866:22;;5901:27;;;5912:16;5901:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:130;;;:::o;11585:1111::-;11670:20;11692:21;11726:13;11742:23;11752:9;11763:1;11742:9;:23::i;:::-;11726:39;;11776:16;89:1:4;11807:9:1;:22;11803:422;;;11846:149;11852:13;;;;;:34;;;11881:5;11869:8;:17;;11852:34;11846:149;;;11917:30;11927:9;11938:8;11917:9;:30::i;:::-;11906:41;-1:-1:-1;11966:13:1;;11846:149;;;11803:422;;;133:1:4;12025:9:1;:23;12021:204;;;12065:149;12071:13;;;;;:34;;;12100:5;12088:8;:17;;12071:34;12065:149;;;12136:30;12146:9;12157:8;12136:9;:30::i;:::-;12125:41;-1:-1:-1;12185:13:1;;12065:149;;;12241:15;;12237:452;;12293:11;12282:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12282:23:1;;12273:32;;12341:11;12330:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12330:23:1;;12320:33;;12379:23;12389:9;12400:1;12379:9;:23::i;:::-;12368:34;;12417:10;12442:236;12456:11;12448:5;:19;12442:236;;;12504:8;12488:6;12495:5;12488:13;;;;;;;;;;;;;:24;;;;;12548:28;12556:9;12567:8;12548:7;:28::i;:::-;12531:7;12539:5;12531:14;;;;;;;;;;;;;:45;;;;;12606:30;12616:9;12627:8;12606:9;:30::i;:::-;12595:41;-1:-1:-1;12655:7:1;;12442:236;;;12237:452;;11585:1111;;;;;;;:::o;1936:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1089:21::-;;;;:::o;5944:306::-;6098:4;;6104:9;;6115:10;;6000;;;;;;6069:57;;-1:-1:-1;;;;;6098:4:1;;;;6104:9;;;6115:10;6069:28;:57::i;:::-;6023:103;;;;6141:11;-1:-1:-1;;;;;6141:16:1;6156:1;6141:16;6137:106;;6220:11;-1:-1:-1;;;;;6182:49:1;:35;6205:11;;6199:2;:17;6182:12;-1:-1:-1;;;;;6182:16:1;;;:35;;;;:::i;:::-;:49;;;;;;6174:57;;6137:106;5944:306;;;:::o;1149:21::-;;;;:::o;2829:967::-;3032:7;;-1:-1:-1;;;;;3032:7:1;3018:10;:21;3010:43;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;-1:-1:-1;;;3010:43:1;;;;;;;;;;;;;;;3106:1;3092:10;:15;;3084:46;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;-1:-1:-1;;;3084:46:1;;;;;;;;;;;;;;;3163:1;3149:10;:15;;3141:46;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;-1:-1:-1;;;3141:46:1;;;;;;;;;;;;;;;3199:14;3215;3249:5;-1:-1:-1;;;;;3234:28:1;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3234:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3234:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3234:30:1;3266;;;-1:-1:-1;;;3266:30:1;;;;-1:-1:-1;;;;;3266:28:1;;;;;:30;;;;;3234;;3266;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;3266:30:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3266:30:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3266:30:1;3198:99;;-1:-1:-1;3266:30:1;-1:-1:-1;;;;;;3331:20:1;;;;;;;:45;;;;;3365:11;-1:-1:-1;;;;;3355:21:1;:6;-1:-1:-1;;;;;3355:21:1;;3331:45;3330:111;;;;3405:10;-1:-1:-1;;;;;3395:20:1;:6;-1:-1:-1;;;;;3395:20:1;;:45;;;;;3429:11;-1:-1:-1;;;;;3419:21:1;:6;-1:-1:-1;;;;;3419:21:1;;3395:45;3308:169;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;-1:-1:-1;;;3308:169:1;;;;;;;;;;;;;;;3490:4;:12;;-1:-1:-1;;;;;3490:12:1;;;-1:-1:-1;;;;;;3490:12:1;;;;;;;3513:9;:22;;;;;;;;;;;;;3546:10;:24;;;;;;;;;;;;;;;3581:9;:22;;;3628:29;;;-1:-1:-1;;;3628:29:1;;;;:27;;-1:-1:-1;3628:29:1;;;;;;;;;;;;;;3513:22;3628:29;;;5:2:-1;;;;30:1;27;20:12;5:2;3628:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3628:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3628:29:1;3614:43;;:11;:43;-1:-1:-1;;3668:9:1;:22;-1:-1:-1;;3719:2:1;3701:15;:20;-1:-1:-1;;3761:2:1;3744:14;:19;2829:967::o;980:19::-;;;-1:-1:-1;;;;;980:19:1;;:::o;6258:132::-;6360:10;;6353:29;;;-1:-1:-1;;;6353:29:1;;;;6318:12;;-1:-1:-1;;;;;6360:10:1;;6353:27;;:29;;;;;;;;;;;;;;6360:10;6353:29;;;5:2:-1;;;;30:1;27;20:12;5:2;6353:29:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6353:29:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6353:29:1;6343:39;;;6258:132;-1:-1:-1;6258:132:1:o;932:22::-;;;-1:-1:-1;;;;;932:22:1;;:::o;1297:24::-;;;-1:-1:-1;;;;;1297:24:1;;:::o;15599:914::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;15727:7;;15701:34;;-1:-1:-1;;;;;15727:7:1;15701:25;:34::i;:::-;-1:-1:-1;;;;;15687:48:1;:10;-1:-1:-1;;;;;15687:48:1;;15679:70;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;-1:-1:-1;;;15679:70:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;15764:19:1;;15760:179;;15821:21;15861:17;;15857:49;;15880:26;;-1:-1:-1;;;;;15880:11:1;;;:26;;;;;15892:13;;15880:26;;;;15892:13;15880:11;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15880:26:1;15857:49;15921:7;;;15760:179;15966:38;;;-1:-1:-1;;;15966:38:1;;15998:4;15966:38;;;;;;15951:12;;-1:-1:-1;;;;;15966:23:1;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;15966:38:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15966:38:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15966:38:1;16067:9;;15966:38;;-1:-1:-1;15966:38:1;;-1:-1:-1;;;;;16058:18:1;;;16067:9;;16058:18;16054:377;;;16093:17;16113:28;133:1:4;16113:16:1;:28::i;:::-;16093:48;;16182:12;16172:7;:22;:51;;16222:1;16172:51;;;16207:12;16197:7;:22;16172:51;16156:67;;16054:377;;;;16263:10;;-1:-1:-1;;;;;16254:19:1;;;16263:10;;16254:19;16250:181;;;16290:17;16310:27;89:1:4;16310:16:1;:27::i;:::-;16290:47;;16378:12;16368:7;:22;:51;;16418:1;16368:51;;;16403:12;16393:7;:22;16368:51;16352:67;;16250:181;;16447:17;;16443:62;;16466:39;16480:5;16487:2;16491:13;16466;:39::i;:::-;5571:1;;;-1:-1:-1;;5594:1:1;5583:8;:12;15599:914::o;1245:23::-;;;;:::o;14023:350::-;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14136:7;;14110:34;;-1:-1:-1;;;;;14136:7:1;14110:25;:34::i;:::-;-1:-1:-1;;;;;14096:48:1;:10;-1:-1:-1;;;;;14096:48:1;;14092:180;;14168:22;89:1:4;14168:11:1;:22::i;:::-;:27;:59;;;;;14199:23;133:1:4;14199:11:1;:23::i;:::-;:28;14168:59;14160:100;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;-1:-1:-1;;;14160:100:1;;;;;;;;;;;;;;;14306:1;14290:12;:17;;14282:48;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;-1:-1:-1;;;14282:48:1;;;;;;;;;;;;;;;14341:9;:24;5594:1;5583:8;:12;14023:350::o;10845:691::-;10954:20;10976:21;11010:16;11029:22;11041:9;11029:11;:22::i;:::-;11010:41;;11091:7;11077:21;;:11;:21;:45;;11111:11;11077:45;;;11101:7;11077:45;;;11062:60;;11153:11;11142:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11142:23:1;;11133:32;;11197:11;11186:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11186:23:1;;11176:33;;11220:13;11236:23;11246:9;11257:1;11236:9;:23::i;:::-;11220:39;-1:-1:-1;11270:12:1;11297:232;11303:13;;;;;:36;;;11328:11;11320:5;:19;;;11303:36;11297:232;;;11371:8;11355:6;11362:5;11355:13;;;;;;;;;;;;;;;:24;;;;;11411:28;11419:9;11430:8;11411:7;:28::i;:::-;11394:7;11402:5;11394:14;;;;;;;;;;;;;;;:45;;;;;11465:30;11475:9;11486:8;11465:9;:30::i;:::-;11454:41;-1:-1:-1;11510:7:1;;11297:232;;14407:350;5513:8;;5525:1;5513:13;5505:32;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;-1:-1:-1;;;5505:32:1;;;;;;;;;;;;;;;5559:1;5548:8;:12;14520:7;;14494:34;;-1:-1:-1;;;;;14520:7:1;14494:25;:34::i;:::-;-1:-1:-1;;;;;14480:48:1;:10;-1:-1:-1;;;;;14480:48:1;;14476:180;;14552:22;89:1:4;14552:11:1;:22::i;:::-;:27;:59;;;;;14583:23;133:1:4;14583:11:1;:23::i;:::-;:28;14552:59;14544:100;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;-1:-1:-1;;;14544:100:1;;;;;;;;;;;;;;;14690:1;14674:12;:17;;14666:48;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;-1:-1:-1;;;14666:48:1;;;;;;;;;;;;;;;14725:9;:24;5594:1;5583:8;:12;14407:350::o;1464:24::-;;;;:::o;1717:26::-;;;;:::o;2899:496:13:-;2994:16;3012;3059:6;-1:-1:-1;;;;;3049:16:13;:6;-1:-1:-1;;;;;3049:16:13;;;3041:48;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;-1:-1:-1;;;3041:48:13;;;;;;;;;;;;;;;3100:14;3126:6;-1:-1:-1;;;;;3117:15:13;:6;-1:-1:-1;;;;;3117:15:13;;:33;;3144:6;3117:33;;;3135:6;3117:33;3100:50;-1:-1:-1;;;;;;3169:20:13;;3161:45;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;-1:-1:-1;;;3161:45:13;;;;;;;;;;;;;;;3218:16;3236;3272:4;-1:-1:-1;;;;;3257:32:13;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3257:34:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3257:34:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3257:34:13;;;;;;;;;-1:-1:-1;3257:34:13;-1:-1:-1;;;;;;3325:16:13;;;;;;;:62;;3368:8;3378;3325:62;;;3345:8;3355;3325:62;3302:85;;;;-1:-1:-1;2899:496:13;-1:-1:-1;;;;;;;2899:496:13:o;685:166::-;743:13;812:7;-1:-1:-1;;;;;794:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;794:40:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;794:40:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;794:40:13;776:67;;;-1:-1:-1;;;776:67:13;;;;-1:-1:-1;;;;;776:65:13;;;;;;:67;;;;;794:40;;776:67;;;;;;;;:65;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;776:67:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;776:67:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;776:67:13;;685:166;-1:-1:-1;;685:166:13:o;2779:231:4:-;2935:9;2964:33;;;:22;:33;;;;;;;;:38;;;;;;;;;;2779:231::o;10051:385:1:-;10153:12;10205:31;;;:20;:31;;;;;;;;:38;;;;;;;;;10245:30;;;:19;:30;;;;;:37;;;;;;;;;10205:38;10294:135;10315:4;10313:1;:6;10294:135;;;10351:53;10364:29;;;;;;;;;;;:36;;;;;;;;:39;;;;;;;;;10351:53;;:12;:53;;;;;:66;;;10340:77;;;;;10321:3;;10294:135;;;;10051:385;;;;;;:::o;433:142:14:-;485:6;512;;;:30;;-1:-1:-1;;527:5:14;;;541:1;536;527:5;536:1;522:15;;;;;:20;512:30;504:63;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;-1:-1:-1;;;504:63:14;;;;;;;;;;;;;;;433:142;;;;:::o;10465:307:1:-;10545:11;10574:13;10590:23;10600:9;10611:1;10590:9;:23::i;:::-;10574:39;;10624:141;10630:13;;10624:141;;10669:28;10677:9;10688:8;10669:7;:28::i;:::-;10659:38;;;;10723:30;10733:9;10744:8;10723:9;:30::i;:::-;10712:41;;10624:141;;;10465:307;;;;:::o;4279:291::-;789:34;;;;;;;;;;;-1:-1:-1;;;789:34:1;;;;;4413:52;;-1:-1:-1;;;;;4413:52:1;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4413:52:1;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;4402:64:1;;;;4367:12;;4381:17;;4402:10;;;4413:52;4402:64;;;25:18:-1;4402:64:1;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4402:64:1;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;4366:100:1;;;;4485:7;:57;;;;-1:-1:-1;4497:11:1;;:16;;:44;;;4528:4;4517:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4517:24:1;4497:44;4477:85;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;-1:-1:-1;;;4477:85:1;;;;;;;;;;;;;;;4279:291;;;;;:::o;556:183:4:-;641:21;694:37;;;:26;:37;;;;;;;556:183::o;277:16457:1:-;;;;;;;;;;-1:-1:-1;;;;;277:16457:1;;;;;;-1:-1:-1;;;;;277:16457:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"
    },
    "contracts/OrderBookFactory.sol:OrderBookFactory": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_factory",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_WETH",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "pair",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "orderBook",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderBookCreated",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "WETH",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "allOrderBookLength",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "allOrderBooks",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            }
          ],
          "name": "createOrderBook",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getCodeHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "getOrderBook",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pairFactory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "608060405234801561001057600080fd5b506040516160173803806160178339818101604052604081101561003357600080fd5b508051602090910151600380546001600160a01b039283166001600160a01b03199182161790915560028054929093169116179055615fa0806100776000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063203d39ff146100725780632c67be04146100bc578063316cc2dd146100fa578063472c66701461011457806383dd41c614610131578063ad5c464814610139578063e14f870d14610141575b600080fd5b6100a06004803603604081101561008857600080fd5b506001600160a01b0381358116916020013516610149565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360808110156100d257600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561016c565b005b61010261058f565b60408051918252519081900360200190f35b6100a06004803603602081101561012a57600080fd5b5035610595565b6101026105bc565b6100a06105ee565b6100a06105fd565b60006020818152928152604080822090935290815220546001600160a01b031681565b826001600160a01b0316846001600160a01b031614156101cd576040805162461bcd60e51b81526020600482015260176024820152764f463a204944454e544943414c5f41444452455353455360481b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b0316106101f05784866101f3565b85855b90925090506001600160a01b038216610246576040805162461bcd60e51b815260206004820152601060248201526f4f463a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b03828116600090815260208181526040808320858516845290915290205416156102b6576040805162461bcd60e51b81526020600482015260156024820152744f463a204f524445525f424f4f4b5f45584953545360581b604482015290519081900360640190fd5b6002546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561030f57600080fd5b505afa158015610323573d6000803e3d6000fd5b505050506040513d602081101561033957600080fd5b505190506001600160a01b038116610394576040805162461bcd60e51b81526020600482015260196024820152784f463a20544f4b454e5f504149525f4e4f545f45584953545360381b604482015290519081900360640190fd5b6060604051806020016103a69061060c565b6020820181038252601f19601f8201166040525090506000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506000818351602085016000f5604080516314d6c7d760e31b81526001600160a01b0387811660048301528d811660248301528c81166044830152606482018c9052608482018b905291519293509083169163a6b63eb89160a48082019260009290919082900301818387803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b5050506001600160a01b038088166000818152602081815260408083208b86168452825280832083835281842094845293825280832080548689166001600160a01b0319918216811790925585548116821790955560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69093018054909416831790935582518985168152908101919091528082018c9052606081018b905290518c83169350918d16917fff812ff6839ab5e7ba32b4568a74ecad57d67a429ced4ff78aa7522f705f9db59181900360800190a350505050505050505050565b60015490565b600181815481106105a257fe5b6000918252602090912001546001600160a01b0316905081565b6000604051806020016105ce9061060c565b6020820181038252601f19601f8201166040525080519060200120905090565b6003546001600160a01b031681565b6002546001600160a01b031681565b6159528061061a8339019056fe60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032a265627a7a7231582085833c653c44bd78ebdfff66245d6d0bc9a270eccff3648139af818b789728a864736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6017 CODESIZE SUB DUP1 PUSH2 0x6017 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x5FA0 DUP1 PUSH2 0x77 PUSH1 0x0 CODECOPY 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 0x6D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x203D39FF EQ PUSH2 0x72 JUMPI DUP1 PUSH4 0x2C67BE04 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x316CC2DD EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x472C6670 EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x83DD41C6 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x139 JUMPI DUP1 PUSH4 0xE14F870D EQ PUSH2 0x141 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x149 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x16C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x102 PUSH2 0x58F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x595 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x5EE JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 MSTORE SWAP1 DUP2 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1CD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4F463A204944454E544943414C5F414444524553534553 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1F0 JUMPI DUP5 DUP7 PUSH2 0x1F3 JUMP JUMPDEST DUP6 DUP6 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x4F463A205A45524F5F41444452455353 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x4F463A204F524445525F424F4F4B5F455849535453 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xE6A43905 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0xE6A43905 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x323 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x394 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x4F463A20544F4B454E5F504149525F4E4F545F455849535453 PUSH1 0x38 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x3A6 SWAP1 PUSH2 0x60C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP2 DUP4 MLOAD PUSH1 0x20 DUP6 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x14D6C7D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP14 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP13 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP12 SWAP1 MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP4 AND SWAP2 PUSH4 0xA6B63EB8 SWAP2 PUSH1 0xA4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP12 DUP7 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP5 DUP5 MSTORE SWAP4 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 DUP10 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE DUP6 SLOAD DUP2 AND DUP3 OR SWAP1 SWAP6 SSTORE PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE SWAP5 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP1 SWAP5 AND DUP4 OR SWAP1 SWAP4 SSTORE DUP3 MLOAD DUP10 DUP6 AND DUP2 MSTORE SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 MLOAD DUP13 DUP4 AND SWAP4 POP SWAP2 DUP14 AND SWAP2 PUSH32 0xFF812FF6839AB5E7BA32B4568A74ECAD57D67A429CED4FF78AA7522F705F9DB5 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x5A2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x5CE SWAP1 PUSH2 0x60C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x5952 DUP1 PUSH2 0x61A DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x12 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x5928 DUP1 PUSH2 0x2A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x17E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x53B4B9D EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x19EDA4BC EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x217A4B70 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0x346970F9 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x38BDE791 EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x573DD9DB EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x58F85880 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0x6069F080 EQ PUSH2 0x4B0 JUMPI DUP1 PUSH4 0x63C69F08 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0x7DE81D8B EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x856652E9 EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x88D519C4 EQ PUSH2 0x60F JUMPI DUP1 PUSH4 0x950F59B2 EQ PUSH2 0x624 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x667 JUMPI DUP1 PUSH4 0x9B2CB5D8 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0xA5CDC8FC EQ PUSH2 0x691 JUMPI DUP1 PUSH4 0xA6B63EB8 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0xA8AA1B31 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xBC9113F0 EQ PUSH2 0x71F JUMPI DUP1 PUSH4 0xC2FFEA8F EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0xC55DAE63 EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xCB160866 EQ PUSH2 0x7B5 JUMPI DUP1 PUSH4 0xDB7B373E EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0xDEB65AC3 EQ PUSH2 0x805 JUMPI DUP1 PUSH4 0xE52FA98B EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0xE68CC597 EQ PUSH2 0x865 JUMPI DUP1 PUSH4 0xF12DBB9F EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xF1564C0B EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xF1A2E849 EQ PUSH2 0x90B JUMPI DUP1 PUSH4 0xF361DF08 EQ PUSH2 0x920 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x935 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x278 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2DF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x302 PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xC1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD29 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP10 DUP11 AND DUP2 MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x100 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xD79 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x487 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x46F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xF1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF22 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1020 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x108C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x581 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x569 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x11DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x120F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x14FC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1502 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x6DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x1770 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1A95 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1AA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1B1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1C89 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1E97 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x811 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x828 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x852 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1FC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x20CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x2215 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2476 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x259A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x25A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x97A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x34B73B30B634B21039B2B73232B9 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP1 DUP4 ADD DUP5 MSTORE SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0xA12 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA37 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xA4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE PUSH1 0x0 PUSH2 0xA65 DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA72 DUP3 PUSH2 0x273D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0xA82 DUP4 PUSH1 0x0 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 PUSH2 0xAC7 DUP6 DUP13 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xAA1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xAB6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST POP POP POP POP SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0xADC JUMPI POP PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAED DUP12 DUP8 DUP5 DUP8 DUP8 DUP15 DUP15 PUSH2 0x28CB JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP SWAP1 SWAP2 POP PUSH2 0xB07 SWAP1 POP DUP13 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP12 POP DUP2 DUP2 EQ ISZERO PUSH2 0xB18 JUMPI POP POP PUSH2 0xB2F JUMP JUMPDEST PUSH2 0xB22 DUP6 DUP6 PUSH2 0x29AC JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xA87 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x29B9 JUMP JUMPDEST DUP10 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0xB7D JUMPI PUSH2 0xB78 DUP11 DUP7 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0xBA3 JUMP JUMPDEST PUSH2 0xBA3 DUP11 DUP7 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST DUP9 ADD SWAP8 POP JUMPDEST POP POP POP POP POP PUSH1 0x1 PUSH1 0x12 DUP2 SWAP1 SSTORE POP SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD PUSH17 0x48796272696458204F72646572426F6F6B PUSH1 0x78 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH2 0xC13 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xC5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xC76 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xCC7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP2 GT ISZERO PUSH2 0xD10 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP6 SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x8 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH2 0x100 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0xDAC PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP5 SWAP2 PUSH2 0xE2F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xE56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xE74 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xE92 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xEB0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0xEEC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xF62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xF7C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xFCD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 GT ISZERO PUSH2 0x1016 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1080 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x106C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x109C DUP6 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 EQ ISZERO PUSH2 0x10D7 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10B9 JUMPI POP DUP5 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x10D2 JUMPI PUSH2 0x10C8 DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10AA JUMP JUMPDEST PUSH2 0x1109 JUMP JUMPDEST PUSH1 0x2 DUP7 EQ ISZERO PUSH2 0x1109 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10F0 JUMPI POP DUP5 DUP3 GT ISZERO JUMPDEST ISZERO PUSH2 0x1109 JUMPI PUSH2 0x10FF DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10E1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x11D2 JUMPI DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1139 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1166 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x1174 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP3 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11A4 DUP8 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x11B0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11C6 DUP8 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1179 JUMP JUMPDEST POP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x11F4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1251 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x126E JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x126B JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x12AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x12C4 DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1317 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1321 PUSH2 0x2DDB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xD SLOAD DUP3 GT PUSH2 0x1335 JUMPI PUSH1 0x0 PUSH2 0x133B JUMP JUMPDEST PUSH1 0xD SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x134E PUSH1 0x8 SLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x1396 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x1409 DUP4 DUP9 DUP9 PUSH2 0x2E85 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x146A JUMPI PUSH2 0x1420 DUP9 DUP8 DUP6 DUP5 DUP12 PUSH1 0x1 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP11 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND SWAP3 SWAP1 DUP12 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x1472 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x14AC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 DUP2 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x0 EQ PUSH2 0x14F7 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x14EC PUSH1 0x9 SLOAD PUSH1 0xA EXP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x14F3 JUMPI INVALID JUMPDEST DIV SWAP3 POP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1542 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH2 0x154F PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE CALLER EQ PUSH2 0x160A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x13DDDB995C88125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1613 DUP2 PUSH2 0x3532 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0xC0 ADD MLOAD EQ PUSH2 0x1632 JUMPI PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x163F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x1654 DUP2 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x36EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC0 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 EQ ISZERO PUSH2 0x16E4 JUMPI PUSH1 0xD DUP2 SWAP1 SSTORE PUSH2 0x16EA JUMP JUMPDEST PUSH1 0xC DUP2 SWAP1 SSTORE JUMPDEST DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD32766082EB3D1EE39881604CAE4EA25B61931060C8FBC7D5F05556040053B57 DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x17BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2327A92124A22222A7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x1806 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x188D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD21220A7 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0xD21220A7 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x190D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP8 AND EQ DUP1 ISZERO PUSH2 0x1956 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x198E JUMPI POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x198E JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x19D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x151BDAD95B8814185A5C88125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xB DUP1 SLOAD SWAP4 DUP10 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE PUSH1 0x7 DUP6 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP2 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x9 SSTORE POP POP PUSH1 0x8 SSTORE POP POP PUSH1 0x1E PUSH1 0xE SSTORE POP POP PUSH1 0x32 PUSH1 0xF SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x1B4B SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x1B6C DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1B79 DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x1B8C DUP5 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x1C2F JUMPI PUSH1 0x0 PUSH2 0x1BA9 DUP7 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x1BBE JUMPI POP PUSH2 0x1C2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BD8 DUP10 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x1BEF DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x1C03 DUP8 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP4 EQ ISZERO PUSH2 0x1C16 JUMPI POP POP POP POP PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x1C20 DUP9 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1B91 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP6 EQ PUSH2 0x1C4D JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x2AAF JUMP JUMPDEST DUP11 ADD SWAP10 POP JUMPDEST POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1CC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1CE3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1D87 JUMPI SELFBALANCE DUP1 ISZERO PUSH2 0x1D81 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA SLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E40 JUMPI PUSH1 0x0 PUSH2 0x1E24 PUSH1 0x2 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E34 JUMPI PUSH1 0x0 PUSH2 0x1E38 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x0 PUSH2 0x1E62 PUSH1 0x1 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E72 JUMPI PUSH1 0x0 PUSH2 0x1E76 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP JUMPDEST DUP1 ISZERO PUSH2 0x1E8B JUMPI PUSH2 0x1E8B DUP5 DUP5 DUP4 PUSH2 0x39BF JUMP JUMPDEST POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1EDD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1EF7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1F6C JUMPI PUSH2 0x1F19 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1F2D JUMPI POP PUSH2 0x1F2B PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1F6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1FB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1FCF DUP6 PUSH2 0x3B47 JUMP JUMPDEST SWAP1 POP DUP4 PUSH4 0xFFFFFFFF AND DUP2 GT PUSH2 0x1FE4 JUMPI DUP1 PUSH2 0x1FEC JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2018 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2045 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH2 0x2055 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x206E JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT JUMPDEST ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP6 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2086 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x209C DUP8 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x20AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x20C4 DUP8 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x205A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x20FC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x211D DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x212A DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x213D DUP6 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x21F1 JUMPI PUSH1 0x0 PUSH2 0x215A DUP6 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x3B59 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x216F JUMPI POP PUSH2 0x21F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2189 DUP9 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x3C97 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x21A1 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x21C5 PUSH2 0x21B8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST DUP9 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP3 EQ ISZERO PUSH2 0x21D8 JUMPI POP POP POP POP PUSH2 0x21F1 JUMP JUMPDEST PUSH2 0x21E2 DUP10 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x2142 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0x220A JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x3E17 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x3E17 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x2257 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2274 JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x2271 JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x22B5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22CA DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x231D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2327 PUSH2 0x3F1D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xC SLOAD DUP3 GT PUSH2 0x233B JUMPI PUSH1 0x0 PUSH2 0x2341 JUMP JUMPDEST PUSH1 0xC SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x8 SLOAD DUP2 LT ISZERO PUSH2 0x238B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x23FE DUP3 DUP8 DUP8 PUSH2 0x3F68 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x245F JUMPI PUSH2 0x2415 DUP8 DUP7 DUP5 DUP5 DUP11 PUSH1 0x2 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x2 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND SWAP3 SWAP1 DUP11 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x2467 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x24B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x24D0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2545 JUMPI PUSH2 0x24F2 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x2506 JUMPI POP PUSH2 0x2504 PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x2545 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2590 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2606 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4944454E544943414C5F414444524553534553 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2627 JUMPI DUP4 PUSH2 0x2629 JUMP JUMPDEST DUP5 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2675 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A45524F5F41444452455353 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x26DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2703 JUMPI DUP1 DUP3 PUSH2 0x2706 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ PUSH2 0x2734 JUMPI PUSH1 0x2 PUSH2 0x2737 JUMP JUMPDEST PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2750 JUMPI POP PUSH1 0x2 PUSH2 0x275D JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH2 0x277B DUP5 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x2820 JUMPI PUSH1 0x0 PUSH2 0x27A3 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x27B9 DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x27C9 JUMPI PUSH1 0x0 PUSH2 0x27DD JUMP JUMPDEST PUSH2 0x27DD DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP12 DUP6 GT PUSH2 0x27EC JUMPI DUP5 PUSH2 0x27EE JUMP JUMPDEST DUP12 JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x2806 JUMPI PUSH2 0x2801 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x2809 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP14 SUB SWAP8 POP SWAP6 POP POP POP DUP4 DUP10 SUB SWAP2 POP POP DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x2837 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x284D DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x285D JUMPI PUSH1 0x0 PUSH2 0x2871 JUMP JUMPDEST PUSH2 0x2871 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP12 DUP7 GT PUSH2 0x2880 JUMPI DUP6 PUSH2 0x2882 JUMP JUMPDEST DUP12 JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x289A JUMPI PUSH2 0x2895 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x289D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 DUP14 SUB SWAP8 POP SWAP5 POP POP POP DUP9 DUP5 ADD SWAP2 POP POP DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST POP DUP9 SWAP4 POP DUP8 SWAP1 POP DUP7 JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH2 0x28E0 DUP13 DUP13 DUP13 DUP13 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP10 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x28F6 DUP4 DUP9 PUSH2 0x43F2 JUMP JUMPDEST SWAP3 POP PUSH2 0x2902 DUP5 DUP10 PUSH2 0x44AE JUMP JUMPDEST SWAP4 POP PUSH2 0x2914 DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH1 0x1 DUP14 EQ PUSH2 0x2931 JUMPI PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x293E JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x294B DUP2 DUP16 DUP9 PUSH2 0x39BF JUMP JUMPDEST POP POP POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x457D JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC SSTORE PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x2B01 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x125394D551919250D251539517D25394155517D05353D55395 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x2B11 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x2B5B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2B6F DUP6 PUSH2 0x3E5 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2B83 DUP3 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BA9 DUP4 PUSH2 0x2B9D DUP9 PUSH2 0x3E8 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x2BB4 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2D29 JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP4 MSTORE PUSH1 0x10 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2CE7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xDEF0D2CB PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xDEF0D2CB SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E7D PUSH1 0xA DUP4 SWAP1 EXP PUSH2 0x2E71 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x2ECF SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EF4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F26 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F3B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x2F50 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x2F64 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F85 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x2FAE JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2FA4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 SWAP6 POP PUSH1 0x0 PUSH2 0x2FC6 PUSH1 0x2 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FD8 JUMPI POP DUP9 DUP2 GT ISZERO JUMPDEST ISZERO PUSH2 0x3100 JUMPI DUP7 DUP6 ISZERO PUSH2 0x3063 JUMPI PUSH2 0x301D PUSH1 0x1 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x300C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x302A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x303E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x3063 JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3070 PUSH1 0x2 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x3087 PUSH1 0x1 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x30A3 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xB SLOAD SWAP10 ADD SWAP9 PUSH2 0x30BD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x30D5 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH2 0x30E5 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x30F2 PUSH1 0x2 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x2FC9 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x311D JUMPI PUSH1 0xA SLOAD PUSH2 0x311D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x312A JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x3136 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x31AC JUMPI PUSH2 0x3174 PUSH1 0x1 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3163 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x3181 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x3195 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP3 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x31F7 JUMPI PUSH2 0x31F0 DUP8 DUP5 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x31CA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x31DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x473D JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP3 POP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xA SLOAD PUSH2 0x3217 SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP7 DUP9 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x322B JUMPI POP DUP9 PUSH2 0x3228 PUSH2 0x1483 JUMP JUMPDEST LT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x84EAF240E0E4D2C6CA40DAD2E6DAC2E8C6D PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE PUSH1 0x60 SWAP4 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x32DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x32C8 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0xFF DUP2 MLOAD LT PUSH2 0x3334 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x13DC99195C88139D5B58995C881A5CC8195E18D959591959 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x333E PUSH2 0x5859 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3370 PUSH2 0x4C3C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE POP SWAP1 POP PUSH1 0x11 PUSH1 0x0 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 PUSH1 0x40 ADD MLOAD SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP SWAP1 PUSH1 0x1 DUP3 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE POP DUP1 PUSH1 0x10 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD SSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD SSTORE SWAP1 POP POP PUSH2 0x34A1 DUP6 DUP8 PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x34AF JUMPI PUSH2 0x34AF DUP6 DUP8 PUSH2 0x4C7A JUMP JUMPDEST PUSH2 0x34BE DUP6 DUP8 DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D04 JUMP JUMPDEST PUSH1 0x40 ADD MLOAD SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x34EA JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x34E7 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3549 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D4C JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT DUP5 ADD SWAP1 DUP2 LT PUSH2 0x362B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE PUSH1 0x11 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0xE0 DUP6 ADD MLOAD DUP2 SLOAD SWAP3 SWAP4 POP DUP4 SWAP3 DUP2 LT PUSH2 0x3664 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP4 DUP3 MSTORE PUSH1 0x10 DUP4 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x7 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 SWAP3 MSTORE KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x36A9 JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE PUSH2 0x36D1 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x36E7 JUMPI PUSH2 0x36E7 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4EB1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3745 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x375B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x37E0 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37DB DUP4 DUP4 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x37EB JUMP JUMPDEST PUSH2 0x37EB DUP5 DUP5 DUP5 PUSH2 0x39BF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x38A3 JUMPI PUSH1 0x0 PUSH2 0x380D DUP12 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP1 POP PUSH2 0x3824 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3836 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x3860 JUMPI DUP11 SWAP5 POP PUSH2 0x3854 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x389D JUMP JUMPDEST PUSH2 0x3878 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3885 DUP2 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP PUSH2 0x389A DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x393E JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x393E JUMPI PUSH1 0x0 PUSH2 0x38B9 DUP12 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP PUSH2 0x38D0 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x38E2 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x390C JUMPI DUP11 SWAP5 POP PUSH2 0x3900 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x393C JUMP JUMPDEST PUSH2 0x3924 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3931 DUP2 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP DUP1 DUP5 SUB SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x3973 PUSH1 0x64 PUSH2 0x2E71 PUSH2 0x3956 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3991 DUP4 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x39B9 JUMPI PUSH2 0x39A4 DUP4 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST DUP3 ADD SWAP2 POP PUSH2 0x39B2 DUP4 DUP3 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH2 0x3994 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH25 0x7472616E7366657228616464726573732C75696E7432353629 PUSH1 0x38 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3A68 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A49 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3ACA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3ACF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3AFD JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3AFD JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x3B40 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x3BFC JUMPI PUSH1 0x0 PUSH2 0x3B78 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3B8E DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3B9E JUMPI PUSH1 0x0 PUSH2 0x3BB2 JUMP JUMPDEST PUSH2 0x3BB2 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x3BCA JUMPI PUSH2 0x3BC5 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3BCD JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP6 POP DUP12 DUP7 GT ISZERO PUSH2 0x3BE8 JUMPI DUP12 SWAP6 POP PUSH2 0x3BE5 DUP7 DUP12 DUP14 PUSH2 0x3E17 JUMP JUMPDEST SWAP5 POP JUMPDEST POP POP POP DUP3 DUP10 SUB SWAP4 POP POP DUP2 DUP8 SUB DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x3C13 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3C29 DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3C39 JUMPI PUSH1 0x0 PUSH2 0x3C4D JUMP JUMPDEST PUSH2 0x3C4D DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x3C65 JUMPI PUSH2 0x3C60 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3C68 JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP5 POP DUP12 DUP6 GT ISZERO PUSH2 0x3C83 JUMPI DUP12 SWAP5 POP PUSH2 0x3C80 DUP6 DUP13 DUP13 PUSH2 0x3E17 JUMP JUMPDEST SWAP6 POP JUMPDEST POP POP POP DUP2 DUP10 SUB SWAP4 POP POP DUP7 DUP3 ADD DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x3CB2 PUSH2 0x2710 PUSH2 0x2E71 DUP8 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CCB PUSH1 0x64 PUSH2 0x2E71 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CE2 PUSH2 0x21B8 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP13 DUP3 GT PUSH2 0x3D19 JUMPI DUP8 SWAP6 POP PUSH2 0x3D00 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH2 0x3D12 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D85 JUMP JUMPDEST DUP13 SWAP2 POP PUSH2 0x3D3D DUP10 DUP12 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH3 0xF4240 DUP6 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP6 POP PUSH2 0x3D70 DUP11 DUP11 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH2 0x2710 DUP14 SWAP1 SUB PUSH2 0x3D64 DUP7 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D82 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x1 DUP15 EQ ISZERO PUSH2 0x3DA0 JUMPI PUSH2 0x3D99 DUP2 DUP14 DUP14 PUSH2 0x2E57 JUMP JUMPDEST SWAP7 POP PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x2 DUP15 EQ ISZERO PUSH2 0x3DB7 JUMPI PUSH2 0x3DB4 DUP2 DUP14 DUP14 PUSH2 0x5039 JUMP JUMPDEST SWAP7 POP JUMPDEST POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x3E6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH26 0x125394D551919250D251539517D3D55514155517D05353D55395 PUSH1 0x32 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x3E7A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x3EC4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3EDC PUSH2 0x3E8 PUSH2 0x3D64 DUP7 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EF6 PUSH2 0x3E5 PUSH2 0x3D64 DUP7 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3F13 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x3F06 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x3FB2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FD7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3FEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4009 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x401E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4033 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4047 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP5 SWAP2 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x406B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x4094 JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x408A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x40A8 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x40BA JUMPI POP DUP9 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x41BC JUMPI DUP7 DUP6 ISZERO PUSH2 0x411F JUMPI PUSH2 0x40D9 PUSH1 0x2 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x40E6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x40FA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x411F JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412C PUSH1 0x1 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x4143 PUSH1 0x2 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x415F DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xA SLOAD SWAP10 ADD SWAP9 PUSH2 0x4179 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x4191 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH2 0x41A1 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x41AE PUSH1 0x1 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x40AB JUMP JUMPDEST DUP2 ISZERO PUSH2 0x41D9 JUMPI PUSH1 0xB SLOAD PUSH2 0x41D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x41E6 JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x41F2 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x4242 JUMPI PUSH2 0x420A PUSH1 0x2 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4217 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x422B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP4 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x428D JUMPI PUSH2 0x4286 DUP8 DUP6 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4260 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4275 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x5053 JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP4 POP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH2 0x42AD SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP8 DUP8 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x42C1 JUMPI POP DUP9 PUSH2 0x42BE PUSH2 0x1483 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1CD95B1B081D1BC81D185C99D95D0819985A5B1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4333 PUSH1 0xA DUP6 SWAP1 EXP PUSH2 0x2E71 DUP8 PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP10 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x5105 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x4361 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4392 DUP6 PUSH2 0x2E71 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP11 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x43C4 DUP10 DUP10 DUP10 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP13 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP PUSH2 0x43DF PUSH2 0x43D7 DUP11 PUSH2 0x273D JUMP JUMPDEST DUP7 DUP7 DUP11 PUSH2 0x5156 JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4422 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x4464 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x443D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4451 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4428 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x447D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x4494 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4468 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x44DE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x452D JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x44F9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x450D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x44E4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4546 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x455D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4531 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x45A3 JUMPI DUP1 PUSH2 0x45BE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x460A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x461E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3B40 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4704 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4679 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x46FF DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x46DE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x46F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4735 JUMP JUMPDEST PUSH2 0x4735 DUP6 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4714 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4728 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x463B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x474E DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x480C JUMPI PUSH2 0x478B PUSH2 0x4773 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x2E71 DUP12 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 PUSH1 0xA DUP9 SWAP1 EXP PUSH2 0x2E71 DUP13 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x479C JUMPI PUSH1 0x1 PUSH2 0x479E JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x139BDD08115B9BDD59DA0813DD5D1C1D5D08105B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4800 DUP11 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP4 POP DUP9 DUP3 ADD SWAP3 POP PUSH2 0x4813 JUMP JUMPDEST DUP10 SWAP4 POP DUP9 SWAP3 POP JUMPDEST POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x4838 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4889 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x489D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x48B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ PUSH2 0x48CF JUMPI DUP3 PUSH1 0x0 PUSH2 0x48D3 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAD5C4648 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4927 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x493B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND SWAP1 DUP8 AND EQ ISZERO PUSH2 0x4AC5 JUMPI PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x1FAC4F7B PUSH1 0xE2 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP8 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x84 DUP6 ADD SWAP1 DUP2 MSTORE DUP5 MLOAD PUSH1 0xA4 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP8 AND SWAP7 PUSH4 0x7EB13DEC SWAP7 DUP12 SWAP7 DUP12 SWAP7 SWAP5 SWAP6 SWAP1 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xC4 DUP7 ADD SWAP3 SWAP2 DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49F1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x49D9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4A1E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4AB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x4AC0 DUP9 DUP6 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4BCA JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x7EB13DEC SWAP2 DUP7 SWAP2 DUP7 SWAP2 DUP14 SWAP2 SWAP1 POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B62 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B4A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4B8F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4BB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4BC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFFF6CAE9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4C1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4C2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x13 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 DUP2 SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP5 DUP4 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 PUSH2 0x4CB6 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE DUP4 DUP3 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x4CEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4CC3 DUP6 DUP6 PUSH2 0x5542 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 DUP2 KECCAK256 DUP8 SWAP1 SSTORE DUP7 DUP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SSTORE POP POP JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD SWAP8 DUP6 MSTORE DUP5 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP8 DUP7 MSTORE DUP5 MSTORE DUP3 DUP6 KECCAK256 SWAP8 DUP6 MSTORE SWAP7 DUP4 MSTORE SWAP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP3 SWAP1 MSTORE SWAP1 MSTORE DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP7 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 DUP6 MSTORE SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP1 DUP3 LT PUSH2 0x4DBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207175657565 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 PUSH1 0x1 DUP5 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4E28 JUMPI DUP6 DUP4 EQ ISZERO PUSH2 0x4DF9 JUMPI PUSH2 0x4E28 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP4 SWAP1 SSTORE DUP3 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4DE4 JUMP JUMPDEST POP DUP1 DUP6 EQ PUSH2 0x4E6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642064617461 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP5 DUP2 MSTORE PUSH1 0x1 DUP1 DUP7 MSTORE DUP3 DUP3 KECCAK256 SWAP5 DUP3 MSTORE SWAP4 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4EBE DUP5 DUP5 PUSH2 0x5542 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 DUP4 EQ PUSH2 0x4F06 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207072696365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP5 DUP4 MSTORE DUP4 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 DUP2 SWAP1 SSTORE SWAP4 DUP5 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x4F92 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4F73 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4FF4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4FF9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x36E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58D1 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7D DUP4 PUSH2 0x2E71 DUP7 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5064 DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 GT ISZERO PUSH2 0x480C JUMPI PUSH2 0x50A1 PUSH2 0x5089 DUP3 PUSH2 0x2E71 DUP11 PUSH1 0xA DUP11 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP9 PUSH2 0x2E71 DUP12 PUSH1 0xA DUP12 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x50B2 JUMPI PUSH1 0x1 PUSH2 0x50B4 JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x139BDD08115B9BDD59DA08125B9C1D5D08105B5BDD5B9D PUSH1 0x4A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x5148 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5142 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x5131 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x513A JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x511A JUMP JUMPDEST POP PUSH2 0x275D JUMP JUMPDEST DUP2 ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 PUSH1 0x0 DUP1 PUSH2 0x5167 DUP10 DUP8 PUSH2 0x4C4A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5195 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x51C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP3 DUP5 LT DUP1 ISZERO PUSH2 0x51D7 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x542B JUMPI PUSH1 0x0 PUSH2 0x51E8 DUP13 DUP11 PUSH2 0x55E4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x51F5 JUMPI POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x51FD PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD AND SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE DUP5 MLOAD DUP6 SWAP1 DUP9 SWAP1 DUP2 LT PUSH2 0x527F 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 PUSH1 0x0 DUP2 PUSH1 0xA0 ADD MLOAD DUP9 GT PUSH2 0x52B2 JUMPI DUP8 PUSH2 0x52B8 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD JUMPDEST SWAP1 POP DUP1 DUP3 PUSH1 0xA0 ADD MLOAD SUB DUP3 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 DUP5 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x52D7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD SWAP8 DUP2 SWAP1 SUB SWAP8 ISZERO PUSH2 0x5399 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH1 0x10 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA892D68F8384663266856EFCC4ED863CA1D9D7E373285F93BD251549EB82490E DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x53A2 DUP3 PUSH2 0x5643 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD34322DF57B73514D4BA1028D9EDEEB8BFC03224B8035B6C1BFE04FB0F06A55C DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x51C8 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x5507 JUMPI PUSH2 0x543B DUP3 DUP6 PUSH2 0x570F JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5467 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP DUP1 MLOAD DUP7 MLOAD GT ISZERO PUSH2 0x54B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x125B99195E08125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x5505 JUMPI PUSH2 0x54E6 DUP11 PUSH2 0x2E71 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x54CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x54F2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x54B4 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x45BE JUMPI DUP4 PUSH2 0x5532 DUP5 PUSH1 0xA DUP6 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST DUP2 PUSH2 0x5539 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x1 DUP5 EQ ISZERO PUSH2 0x559F JUMPI JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x559A JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x5595 JUMPI PUSH2 0x559A JUMP JUMPDEST PUSH2 0x5566 JUMP JUMPDEST PUSH2 0x55DD JUMP JUMPDEST PUSH1 0x2 DUP5 EQ ISZERO PUSH2 0x55DD JUMPI JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x55DD JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x55D8 JUMPI PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x55A9 JUMP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x5655 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x57E0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 MLOAD DUP3 GT ISZERO PUSH2 0x5758 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x92DCECC2D8D2C840D8CADCCEE8D PUSH1 0x93 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP3 EQ ISZERO PUSH2 0x5768 JUMPI POP DUP2 PUSH2 0x2737 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5792 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x57AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x57C0 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5798 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE SWAP6 DUP3 MSTORE PUSH1 0x1 DUP1 DUP3 MSTORE DUP4 DUP4 KECCAK256 SWAP6 DUP4 MSTORE SWAP5 SWAP1 MSTORE KECCAK256 DUP1 SLOAD SWAP1 SWAP3 ADD SWAP1 SWAP2 SSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID SWAP14 CALLVALUE 0xEE 0xE0 0xC3 LOG3 0xCD 0x21 ORIGIN 0xD4 0x29 DUP8 0x2E PC XOR EXTCODESIZE SIGNEXTEND LOG2 SWAP7 0xCD 0xBA BLOCKHASH SWAP5 DUP4 EXP 0xA5 DUP11 SWAP16 0xB3 COINBASE PUSH9 0xEF5472616E73666572 0x48 PUSH6 0x6C7065723A20 GASLIMIT SLOAD 0x48 0x5F SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0x5C 0xEA 0x5D 0x2C 0xCC 0xE1 PUSH11 0xAB6226DE87935AFEA61FF CREATE DUP15 ISZERO DUP11 JUMP DUP4 LOG1 CALL 0xE0 LOG1 DELEGATECALL 0x49 BLOCKHASH CODESIZE PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP6 DUP4 EXTCODECOPY PUSH6 0x3C44BD78EBDF SELFDESTRUCT PUSH7 0x245D6D0BC9A270 0xEC 0xCF RETURN PUSH5 0x8139AF818B PUSH25 0x9728A864736F6C634300051000320000000000000000000000 ",
          "sourceMap": "103:1994:2:-;;;517:110;8:9:-1;5:2;;;30:1;27;20:12;5:2;517:110:2;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;517:110:2;;;;;;;594:4;580:39;;-1:-1:-1;;;;;580:39:2;;;-1:-1:-1;;;;;;580:39:2;;;;;;;581:11;580:39;;;;;;;;;;;103:1994;;;;;;"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "608060405234801561001057600080fd5b506004361061006d5760003560e01c8063203d39ff146100725780632c67be04146100bc578063316cc2dd146100fa578063472c66701461011457806383dd41c614610131578063ad5c464814610139578063e14f870d14610141575b600080fd5b6100a06004803603604081101561008857600080fd5b506001600160a01b0381358116916020013516610149565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360808110156100d257600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561016c565b005b61010261058f565b60408051918252519081900360200190f35b6100a06004803603602081101561012a57600080fd5b5035610595565b6101026105bc565b6100a06105ee565b6100a06105fd565b60006020818152928152604080822090935290815220546001600160a01b031681565b826001600160a01b0316846001600160a01b031614156101cd576040805162461bcd60e51b81526020600482015260176024820152764f463a204944454e544943414c5f41444452455353455360481b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b0316106101f05784866101f3565b85855b90925090506001600160a01b038216610246576040805162461bcd60e51b815260206004820152601060248201526f4f463a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b03828116600090815260208181526040808320858516845290915290205416156102b6576040805162461bcd60e51b81526020600482015260156024820152744f463a204f524445525f424f4f4b5f45584953545360581b604482015290519081900360640190fd5b6002546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561030f57600080fd5b505afa158015610323573d6000803e3d6000fd5b505050506040513d602081101561033957600080fd5b505190506001600160a01b038116610394576040805162461bcd60e51b81526020600482015260196024820152784f463a20544f4b454e5f504149525f4e4f545f45584953545360381b604482015290519081900360640190fd5b6060604051806020016103a69061060c565b6020820181038252601f19601f8201166040525090506000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506000818351602085016000f5604080516314d6c7d760e31b81526001600160a01b0387811660048301528d811660248301528c81166044830152606482018c9052608482018b905291519293509083169163a6b63eb89160a48082019260009290919082900301818387803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b5050506001600160a01b038088166000818152602081815260408083208b86168452825280832083835281842094845293825280832080548689166001600160a01b0319918216811790925585548116821790955560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69093018054909416831790935582518985168152908101919091528082018c9052606081018b905290518c83169350918d16917fff812ff6839ab5e7ba32b4568a74ecad57d67a429ced4ff78aa7522f705f9db59181900360800190a350505050505050505050565b60015490565b600181815481106105a257fe5b6000918252602090912001546001600160a01b0316905081565b6000604051806020016105ce9061060c565b6020820181038252601f19601f8201166040525080519060200120905090565b6003546001600160a01b031681565b6002546001600160a01b031681565b6159528061061a8339019056fe60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032a265627a7a7231582085833c653c44bd78ebdfff66245d6d0bc9a270eccff3648139af818b789728a864736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x6D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x203D39FF EQ PUSH2 0x72 JUMPI DUP1 PUSH4 0x2C67BE04 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x316CC2DD EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x472C6670 EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x83DD41C6 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x139 JUMPI DUP1 PUSH4 0xE14F870D EQ PUSH2 0x141 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x149 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x16C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x102 PUSH2 0x58F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x595 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x5EE JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 MSTORE SWAP1 DUP2 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1CD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4F463A204944454E544943414C5F414444524553534553 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x1F0 JUMPI DUP5 DUP7 PUSH2 0x1F3 JUMP JUMPDEST DUP6 DUP6 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x4F463A205A45524F5F41444452455353 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x4F463A204F524445525F424F4F4B5F455849535453 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xE6A43905 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0xE6A43905 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x323 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x394 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x4F463A20544F4B454E5F504149525F4E4F545F455849535453 PUSH1 0x38 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x3A6 SWAP1 PUSH2 0x60C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP2 DUP4 MLOAD PUSH1 0x20 DUP6 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x14D6C7D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP14 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP13 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP12 SWAP1 MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP4 AND SWAP2 PUSH4 0xA6B63EB8 SWAP2 PUSH1 0xA4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP12 DUP7 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP5 DUP5 MSTORE SWAP4 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 DUP10 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE DUP6 SLOAD DUP2 AND DUP3 OR SWAP1 SWAP6 SSTORE PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE SWAP5 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP1 SWAP5 AND DUP4 OR SWAP1 SWAP4 SSTORE DUP3 MLOAD DUP10 DUP6 AND DUP2 MSTORE SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 MLOAD DUP13 DUP4 AND SWAP4 POP SWAP2 DUP14 AND SWAP2 PUSH32 0xFF812FF6839AB5E7BA32B4568A74ECAD57D67A429CED4FF78AA7522F705F9DB5 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x5A2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x5CE SWAP1 PUSH2 0x60C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x5952 DUP1 PUSH2 0x61A DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x12 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x5928 DUP1 PUSH2 0x2A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x17E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x53B4B9D EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x19EDA4BC EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x217A4B70 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0x346970F9 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x38BDE791 EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x573DD9DB EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x58F85880 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0x6069F080 EQ PUSH2 0x4B0 JUMPI DUP1 PUSH4 0x63C69F08 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0x7DE81D8B EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x856652E9 EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x88D519C4 EQ PUSH2 0x60F JUMPI DUP1 PUSH4 0x950F59B2 EQ PUSH2 0x624 JUMPI DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x667 JUMPI DUP1 PUSH4 0x9B2CB5D8 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0xA5CDC8FC EQ PUSH2 0x691 JUMPI DUP1 PUSH4 0xA6B63EB8 EQ PUSH2 0x6BB JUMPI DUP1 PUSH4 0xA8AA1B31 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xBC9113F0 EQ PUSH2 0x71F JUMPI DUP1 PUSH4 0xC2FFEA8F EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0xC55DAE63 EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xCB160866 EQ PUSH2 0x7B5 JUMPI DUP1 PUSH4 0xDB7B373E EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0xDEB65AC3 EQ PUSH2 0x805 JUMPI DUP1 PUSH4 0xE52FA98B EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0xE68CC597 EQ PUSH2 0x865 JUMPI DUP1 PUSH4 0xF12DBB9F EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xF1564C0B EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xF1A2E849 EQ PUSH2 0x90B JUMPI DUP1 PUSH4 0xF361DF08 EQ PUSH2 0x920 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x935 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x278 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2DF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x302 PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xC1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD29 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP10 DUP11 AND DUP2 MSTORE SWAP8 SWAP1 SWAP9 AND PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x100 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xD79 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x487 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x46F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0xF1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF22 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1020 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x108C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x581 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x569 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x11DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1209 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x120F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x14FC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1502 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x6DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x1770 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1A95 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1AA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1B1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x797 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x367 PUSH2 0x1C7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1C89 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x1E97 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x811 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x828 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E9D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x852 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1FC1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x20CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x2215 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2476 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x259A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40F PUSH2 0x25A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x97A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9CF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x34B73B30B634B21039B2B73232B9 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP1 DUP4 ADD DUP5 MSTORE SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0xA12 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA37 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xA4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE PUSH1 0x0 PUSH2 0xA65 DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA72 DUP3 PUSH2 0x273D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0xA82 DUP4 PUSH1 0x0 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 PUSH2 0xAC7 DUP6 DUP13 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xAA1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xAB6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST POP POP POP POP SWAP1 POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0xADC JUMPI POP PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAED DUP12 DUP8 DUP5 DUP8 DUP8 DUP15 DUP15 PUSH2 0x28CB JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP SWAP1 SWAP2 POP PUSH2 0xB07 SWAP1 POP DUP13 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP12 POP DUP2 DUP2 EQ ISZERO PUSH2 0xB18 JUMPI POP POP PUSH2 0xB2F JUMP JUMPDEST PUSH2 0xB22 DUP6 DUP6 PUSH2 0x29AC JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xA87 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x29B9 JUMP JUMPDEST DUP10 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0xB7D JUMPI PUSH2 0xB78 DUP11 DUP7 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0xBA3 JUMP JUMPDEST PUSH2 0xBA3 DUP11 DUP7 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xB8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB6B JUMPI INVALID JUMPDEST DUP9 ADD SWAP8 POP JUMPDEST POP POP POP POP POP PUSH1 0x1 PUSH1 0x12 DUP2 SWAP1 SSTORE POP SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x11 DUP2 MSTORE PUSH1 0x20 ADD PUSH17 0x48796272696458204F72646572426F6F6B PUSH1 0x78 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH2 0xC13 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xC5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xC76 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xCC7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP2 GT ISZERO PUSH2 0xD10 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND SWAP8 SWAP6 SWAP1 SWAP7 AND SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x8 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH2 0x100 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0xDAC PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP5 SWAP2 PUSH2 0xE2F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xE56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xE74 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xE92 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xEB0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0xEEC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0xF62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0xF7C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xFCD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 GT ISZERO PUSH2 0x1016 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x496E76616C6964204665652052617465 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1080 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x106C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x109C DUP6 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 EQ ISZERO PUSH2 0x10D7 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10B9 JUMPI POP DUP5 DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x10D2 JUMPI PUSH2 0x10C8 DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10AA JUMP JUMPDEST PUSH2 0x1109 JUMP JUMPDEST PUSH1 0x2 DUP7 EQ ISZERO PUSH2 0x1109 JUMPI JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10F0 JUMPI POP DUP5 DUP3 GT ISZERO JUMPDEST ISZERO PUSH2 0x1109 JUMPI PUSH2 0x10FF DUP7 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x10E1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x11D2 JUMPI DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1139 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1166 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH2 0x1174 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11D0 JUMPI DUP3 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11A4 DUP8 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x11B0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x11C6 DUP8 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1179 JUMP JUMPDEST POP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x11F4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SWAP2 POP POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1251 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x126E JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x126B JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x12AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x12C4 DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1317 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1321 PUSH2 0x2DDB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xD SLOAD DUP3 GT PUSH2 0x1335 JUMPI PUSH1 0x0 PUSH2 0x133B JUMP JUMPDEST PUSH1 0xD SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x134E PUSH1 0x8 SLOAD DUP8 PUSH1 0x9 SLOAD PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x1396 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x1409 DUP4 DUP9 DUP9 PUSH2 0x2E85 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x146A JUMPI PUSH2 0x1420 DUP9 DUP8 DUP6 DUP5 DUP12 PUSH1 0x1 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP11 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND SWAP3 SWAP1 DUP12 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x1472 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x14AC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 DUP2 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x0 EQ PUSH2 0x14F7 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x14EC PUSH1 0x9 SLOAD PUSH1 0xA EXP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x14F3 JUMPI INVALID JUMPDEST DIV SWAP3 POP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1542 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH2 0x154F PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP5 ADD SLOAD SWAP1 SWAP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE CALLER EQ PUSH2 0x160A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x13DDDB995C88125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1613 DUP2 PUSH2 0x3532 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0xC0 ADD MLOAD EQ PUSH2 0x1632 JUMPI PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x163F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x1654 DUP2 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x36EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x169E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC0 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 EQ ISZERO PUSH2 0x16E4 JUMPI PUSH1 0xD DUP2 SWAP1 SSTORE PUSH2 0x16EA JUMP JUMPDEST PUSH1 0xC DUP2 SWAP1 SSTORE JUMPDEST DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD32766082EB3D1EE39881604CAE4EA25B61931060C8FBC7D5F05556040053B57 DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x17BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2327A92124A22222A7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x1806 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x188D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD21220A7 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0xD21220A7 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x190D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP8 AND EQ DUP1 ISZERO PUSH2 0x1956 JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST DUP1 PUSH2 0x198E JUMPI POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x198E JUMPI POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x19D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x151BDAD95B8814185A5C88125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xB DUP1 SLOAD SWAP4 DUP10 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE PUSH1 0x7 DUP6 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP2 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH1 0x9 SSTORE POP POP PUSH1 0x8 SSTORE POP POP PUSH1 0x1E PUSH1 0xE SSTORE POP POP PUSH1 0x32 PUSH1 0xF SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x1B4B SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x1B6C DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1B79 DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x1B8C DUP5 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x1C2F JUMPI PUSH1 0x0 PUSH2 0x1BA9 DUP7 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x1BBE JUMPI POP PUSH2 0x1C2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BD8 DUP10 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x1BEF DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x1C03 DUP8 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP4 EQ ISZERO PUSH2 0x1C16 JUMPI POP POP POP POP PUSH2 0x1C2F JUMP JUMPDEST PUSH2 0x1C20 DUP9 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x1B91 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP6 EQ PUSH2 0x1C4D JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x2AAF JUMP JUMPDEST DUP11 ADD SWAP10 POP JUMPDEST POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1CC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1CE3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x2337B93134B23232B7 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1D87 JUMPI SELFBALANCE DUP1 ISZERO PUSH2 0x1D81 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1D7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA SLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E40 JUMPI PUSH1 0x0 PUSH2 0x1E24 PUSH1 0x2 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E34 JUMPI PUSH1 0x0 PUSH2 0x1E38 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x0 PUSH2 0x1E62 PUSH1 0x1 PUSH2 0x3983 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x1E72 JUMPI PUSH1 0x0 PUSH2 0x1E76 JUMP JUMPDEST DUP1 DUP4 SUB JUMPDEST SWAP2 POP POP JUMPDEST DUP1 ISZERO PUSH2 0x1E8B JUMPI PUSH2 0x1E8B DUP5 DUP5 DUP4 PUSH2 0x39BF JUMP JUMPDEST POP POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x1EDD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x1EF7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1F6C JUMPI PUSH2 0x1F19 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1F2D JUMPI POP PUSH2 0x1F2B PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1F6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x1FB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x141C9A58D94814DD195C08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1FCF DUP6 PUSH2 0x3B47 JUMP JUMPDEST SWAP1 POP DUP4 PUSH4 0xFFFFFFFF AND DUP2 GT PUSH2 0x1FE4 JUMPI DUP1 PUSH2 0x1FEC JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2018 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2045 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 PUSH2 0x2055 DUP7 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x206E JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT JUMPDEST ISZERO PUSH2 0x11D0 JUMPI DUP2 DUP6 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2086 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x209C DUP8 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x20AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x20C4 DUP8 DUP4 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x205A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH2 0x20FC SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP2 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP PUSH1 0x0 PUSH2 0x211D DUP9 PUSH2 0x2715 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x212A DUP3 PUSH2 0x273D JUMP JUMPDEST PUSH1 0x0 SWAP8 POP SWAP1 POP DUP8 DUP8 DUP1 PUSH2 0x213D DUP6 DUP3 PUSH2 0x2762 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST DUP2 ISZERO PUSH2 0x21F1 JUMPI PUSH1 0x0 PUSH2 0x215A DUP6 DUP6 DUP11 DUP11 DUP8 PUSH1 0x9 SLOAD PUSH2 0x3B59 JUMP JUMPDEST SWAP1 SWAP14 POP SWAP12 POP SWAP2 SWAP3 POP POP POP DUP1 PUSH2 0x216F JUMPI POP PUSH2 0x21F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2189 DUP9 DUP6 DUP9 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP12 PUSH2 0x3C97 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x21A1 DUP4 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 SWAP14 ADD SWAP13 PUSH2 0x21C5 PUSH2 0x21B8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST DUP9 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP7 POP DUP4 DUP3 EQ ISZERO PUSH2 0x21D8 JUMPI POP POP POP POP PUSH2 0x21F1 JUMP JUMPDEST PUSH2 0x21E2 DUP10 DUP8 PUSH2 0x2762 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH2 0x2142 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x1 DUP5 EQ PUSH2 0x220A JUMPI PUSH2 0x1C48 DUP4 DUP9 DUP9 PUSH2 0x3E17 JUMP JUMPDEST PUSH2 0x1C58 DUP4 DUP8 DUP10 PUSH2 0x3E17 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x2257 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2274 JUMPI POP PUSH1 0x7 SLOAD DUP4 DUP2 PUSH2 0x2271 JUMPI INVALID JUMPDEST MOD ISZERO JUMPDEST PUSH2 0x22B5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x141C9A58D948125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22CA DUP2 PUSH2 0x2D32 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x231D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x13DC99195C909BDBDAC81D5B98DBDB9B9958DD1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2327 PUSH2 0x3F1D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xC SLOAD DUP3 GT PUSH2 0x233B JUMPI PUSH1 0x0 PUSH2 0x2341 JUMP JUMPDEST PUSH1 0xC SLOAD DUP3 SUB JUMPDEST SWAP1 POP PUSH1 0x8 SLOAD DUP2 LT ISZERO PUSH2 0x238B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x105B5BDD5B9D08125B9D985B1A59 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xBC25CF77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xBC25CF77 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x23FE DUP3 DUP8 DUP8 PUSH2 0x3F68 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x245F JUMPI PUSH2 0x2415 DUP8 DUP7 DUP5 DUP5 DUP11 PUSH1 0x2 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x2 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND SWAP3 SWAP1 DUP11 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x58B1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 JUMPDEST PUSH2 0x2467 PUSH2 0x29B9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x12 SSTORE POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0x1 EQ PUSH2 0x24B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x1313D0D2D151 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x12 SSTORE PUSH1 0x5 SLOAD PUSH2 0x24D0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2545 JUMPI PUSH2 0x24F2 PUSH1 0x1 PUSH2 0x3B47 JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x2506 JUMPI POP PUSH2 0x2504 PUSH1 0x2 PUSH2 0x3B47 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x2545 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x13DC99195C88115E1A5CDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x2590 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x135A5B88105B5BDD5B9D08125B9D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x12 SSTORE JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2606 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4944454E544943414C5F414444524553534553 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x2627 JUMPI DUP4 PUSH2 0x2629 JUMP JUMPDEST DUP5 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2675 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x5A45524F5F41444452455353 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x26DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP1 DUP5 AND EQ PUSH2 0x2703 JUMPI DUP1 DUP3 PUSH2 0x2706 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ PUSH2 0x2734 JUMPI PUSH1 0x2 PUSH2 0x2737 JUMP JUMPDEST PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2750 JUMPI POP PUSH1 0x2 PUSH2 0x275D JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x2C9B JUMP JUMPDEST SWAP2 POP PUSH2 0x277B DUP5 DUP4 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x2820 JUMPI PUSH1 0x0 PUSH2 0x27A3 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x27B9 DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x27C9 JUMPI PUSH1 0x0 PUSH2 0x27DD JUMP JUMPDEST PUSH2 0x27DD DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP12 DUP6 GT PUSH2 0x27EC JUMPI DUP5 PUSH2 0x27EE JUMP JUMPDEST DUP12 JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x2806 JUMPI PUSH2 0x2801 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x2809 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP14 SUB SWAP8 POP SWAP6 POP POP POP DUP4 DUP10 SUB SWAP2 POP POP DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x2837 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x284D DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x285D JUMPI PUSH1 0x0 PUSH2 0x2871 JUMP JUMPDEST PUSH2 0x2871 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP12 DUP7 GT PUSH2 0x2880 JUMPI DUP6 PUSH2 0x2882 JUMP JUMPDEST DUP12 JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x289A JUMPI PUSH2 0x2895 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x289D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 DUP14 SUB SWAP8 POP SWAP5 POP POP POP DUP9 DUP5 ADD SWAP2 POP POP DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST POP DUP9 SWAP4 POP DUP8 SWAP1 POP DUP7 JUMPDEST SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 POP SWAP7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH2 0x28E0 DUP13 DUP13 DUP13 DUP13 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP10 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x28F6 DUP4 DUP9 PUSH2 0x43F2 JUMP JUMPDEST SWAP3 POP PUSH2 0x2902 DUP5 DUP10 PUSH2 0x44AE JUMP JUMPDEST SWAP4 POP PUSH2 0x2914 DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH1 0x1 DUP14 EQ PUSH2 0x2931 JUMPI PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x293E JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST SWAP1 POP PUSH2 0x294B DUP2 DUP16 DUP9 PUSH2 0x39BF JUMP JUMPDEST POP POP POP SWAP8 POP SWAP8 POP SWAP8 POP SWAP8 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x276F DUP5 DUP5 PUSH2 0x457D JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC SSTORE PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x2B01 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x125394D551919250D251539517D25394155517D05353D55395 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x2B11 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x2B5B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2B6F DUP6 PUSH2 0x3E5 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2B83 DUP3 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BA9 DUP4 PUSH2 0x2B9D DUP9 PUSH2 0x3E8 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0x2BB4 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2D29 JUMPI PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP4 MSTORE PUSH1 0x10 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2CE7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE14F870D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xDEF0D2CB PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xDEF0D2CB SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xB SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E7D PUSH1 0xA DUP4 SWAP1 EXP PUSH2 0x2E71 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x2ECF SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EF4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F26 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F3B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x2F50 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x2F64 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2F85 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x2FAE JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2FA4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 SWAP6 POP PUSH1 0x0 PUSH2 0x2FC6 PUSH1 0x2 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FD8 JUMPI POP DUP9 DUP2 GT ISZERO JUMPDEST ISZERO PUSH2 0x3100 JUMPI DUP7 DUP6 ISZERO PUSH2 0x3063 JUMPI PUSH2 0x301D PUSH1 0x1 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x300C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x302A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x303E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x3063 JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3070 PUSH1 0x2 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x3087 PUSH1 0x1 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x30A3 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xB SLOAD SWAP10 ADD SWAP9 PUSH2 0x30BD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x30D5 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x3100 JUMP JUMPDEST PUSH2 0x30E5 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x30F2 PUSH1 0x2 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x2FC9 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x311D JUMPI PUSH1 0xA SLOAD PUSH2 0x311D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x312A JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x3136 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x31AC JUMPI PUSH2 0x3174 PUSH1 0x1 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3163 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x2784 JUMP JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x3181 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x3195 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP3 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x31F7 JUMPI PUSH2 0x31F0 DUP8 DUP5 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x31CA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x31DF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x473D JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP3 POP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xA SLOAD PUSH2 0x3217 SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP7 DUP9 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x322B JUMPI POP DUP9 PUSH2 0x3228 PUSH2 0x1483 JUMP JUMPDEST LT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x84EAF240E0E4D2C6CA40DAD2E6DAC2E8C6D PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE PUSH1 0x60 SWAP4 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x32DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x32C8 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0xFF DUP2 MLOAD LT PUSH2 0x3334 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x13DC99195C88139D5B58995C881A5CC8195E18D959591959 PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x333E PUSH2 0x5859 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3370 PUSH2 0x4C3C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE POP SWAP1 POP PUSH1 0x11 PUSH1 0x0 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 PUSH1 0x40 ADD MLOAD SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP SWAP1 PUSH1 0x1 DUP3 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE POP DUP1 PUSH1 0x10 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD SSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD SSTORE SWAP1 POP POP PUSH2 0x34A1 DUP6 DUP8 PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x34AF JUMPI PUSH2 0x34AF DUP6 DUP8 PUSH2 0x4C7A JUMP JUMPDEST PUSH2 0x34BE DUP6 DUP8 DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D04 JUMP JUMPDEST PUSH1 0x40 ADD MLOAD SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x34EA JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x34E7 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3549 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4D4C JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT DUP5 ADD SWAP1 DUP2 LT PUSH2 0x362B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE PUSH1 0x11 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0xE0 DUP6 ADD MLOAD DUP2 SLOAD SWAP3 SWAP4 POP DUP4 SWAP3 DUP2 LT PUSH2 0x3664 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP4 DUP3 MSTORE PUSH1 0x10 DUP4 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x7 ADD SWAP2 SWAP1 SWAP2 SSTORE DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 SWAP3 MSTORE KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x36A9 JUMPI INVALID JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE PUSH2 0x36D1 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4C4A JUMP JUMPDEST PUSH2 0x36E7 JUMPI PUSH2 0x36E7 DUP4 PUSH1 0xC0 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x4EB1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3745 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x375B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x37E0 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37DB DUP4 DUP4 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x37EB JUMP JUMPDEST PUSH2 0x37EB DUP5 DUP5 DUP5 PUSH2 0x39BF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x38A3 JUMPI PUSH1 0x0 PUSH2 0x380D DUP12 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP1 POP PUSH2 0x3824 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3836 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x3860 JUMPI DUP11 SWAP5 POP PUSH2 0x3854 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x389D JUMP JUMPDEST PUSH2 0x3878 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3885 DUP2 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP PUSH2 0x389A DUP5 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP JUMPDEST POP PUSH2 0x393E JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x393E JUMPI PUSH1 0x0 PUSH2 0x38B9 DUP12 DUP12 DUP12 PUSH2 0x2E57 JUMP JUMPDEST SWAP1 POP PUSH2 0x38D0 DUP7 PUSH2 0x2710 DUP11 SWAP1 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x38E2 DUP3 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST GT PUSH2 0x390C JUMPI DUP11 SWAP5 POP PUSH2 0x3900 PUSH2 0x2710 PUSH2 0x2E71 DUP4 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP DUP2 DUP2 ADD SWAP4 POP PUSH2 0x393C JUMP JUMPDEST PUSH2 0x3924 PUSH2 0x2710 PUSH2 0x2E71 DUP9 DUP12 DUP4 SUB PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3931 DUP2 DUP12 DUP12 PUSH2 0x5039 JUMP JUMPDEST SWAP5 POP DUP6 SWAP4 POP DUP1 DUP5 SUB SWAP2 POP JUMPDEST POP JUMPDEST PUSH2 0x3973 PUSH1 0x64 PUSH2 0x2E71 PUSH2 0x3956 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP2 POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3991 DUP4 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x39B9 JUMPI PUSH2 0x39A4 DUP4 DUP3 PUSH2 0x2CB8 JUMP JUMPDEST DUP3 ADD SWAP2 POP PUSH2 0x39B2 DUP4 DUP3 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP PUSH2 0x3994 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH25 0x7472616E7366657228616464726573732C75696E7432353629 PUSH1 0x38 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3A68 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A49 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3ACA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3ACF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3AFD JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x3AFD JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x3B40 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1514905394D1915497D19052531151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 DUP12 EQ ISZERO PUSH2 0x3BFC JUMPI PUSH1 0x0 PUSH2 0x3B78 DUP11 DUP11 DUP11 DUP11 PUSH2 0x430A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3B8E DUP11 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3B9E JUMPI PUSH1 0x0 PUSH2 0x3BB2 JUMP JUMPDEST PUSH2 0x3BB2 DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP5 POP DUP5 ISZERO PUSH2 0x3BCA JUMPI PUSH2 0x3BC5 DUP6 DUP12 DUP14 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3BCD JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP6 POP DUP12 DUP7 GT ISZERO PUSH2 0x3BE8 JUMPI DUP12 SWAP6 POP PUSH2 0x3BE5 DUP7 DUP12 DUP14 PUSH2 0x3E17 JUMP JUMPDEST SWAP5 POP JUMPDEST POP POP POP DUP3 DUP10 SUB SWAP4 POP POP DUP2 DUP8 SUB DUP7 DUP3 ADD PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x2 DUP12 EQ ISZERO PUSH2 0x28B4 JUMPI PUSH1 0x0 PUSH2 0x3C13 DUP11 DUP11 DUP11 DUP11 PUSH2 0x4369 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3C29 DUP12 PUSH2 0x7CD PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0x3C39 JUMPI PUSH1 0x0 PUSH2 0x3C4D JUMP JUMPDEST PUSH2 0x3C4D DUP2 DUP4 SUB PUSH2 0x7CA PUSH4 0xFFFFFFFF PUSH2 0x4356 AND JUMP JUMPDEST SWAP6 POP DUP6 ISZERO PUSH2 0x3C65 JUMPI PUSH2 0x3C60 DUP7 DUP13 DUP13 PUSH2 0x2AAF JUMP JUMPDEST PUSH2 0x3C68 JUMP JUMPDEST PUSH1 0x0 JUMPDEST SWAP5 POP DUP12 DUP6 GT ISZERO PUSH2 0x3C83 JUMPI DUP12 SWAP5 POP PUSH2 0x3C80 DUP6 DUP13 DUP13 PUSH2 0x3E17 JUMP JUMPDEST SWAP6 POP JUMPDEST POP POP POP DUP2 DUP10 SUB SWAP4 POP POP DUP7 DUP3 ADD DUP2 DUP8 SUB PUSH2 0x28BD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x3CB2 PUSH2 0x2710 PUSH2 0x2E71 DUP8 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CCB PUSH1 0x64 PUSH2 0x2E71 DUP5 DUP11 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CE2 PUSH2 0x21B8 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP13 DUP3 GT PUSH2 0x3D19 JUMPI DUP8 SWAP6 POP PUSH2 0x3D00 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP PUSH2 0x3D12 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D85 JUMP JUMPDEST DUP13 SWAP2 POP PUSH2 0x3D3D DUP10 DUP12 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH3 0xF4240 DUP6 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP6 POP PUSH2 0x3D70 DUP11 DUP11 MUL PUSH3 0xF4240 SUB PUSH2 0x2E71 PUSH2 0x2710 DUP14 SWAP1 SUB PUSH2 0x3D64 DUP7 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3D82 DUP7 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x1 DUP15 EQ ISZERO PUSH2 0x3DA0 JUMPI PUSH2 0x3D99 DUP2 DUP14 DUP14 PUSH2 0x2E57 JUMP JUMPDEST SWAP7 POP PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x2 DUP15 EQ ISZERO PUSH2 0x3DB7 JUMPI PUSH2 0x3DB4 DUP2 DUP14 DUP14 PUSH2 0x5039 JUMP JUMPDEST SWAP7 POP JUMPDEST POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x3E6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH26 0x125394D551919250D251539517D3D55514155517D05353D55395 PUSH1 0x32 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x3E7A JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0x3EC4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x494E53554646494349454E545F4C4951554944495459 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3EDC PUSH2 0x3E8 PUSH2 0x3D64 DUP7 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EF6 PUSH2 0x3E5 PUSH2 0x3D64 DUP7 DUP10 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3F13 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0x3F06 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3DC8 AND JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CODESIZE DUP4 CODECOPY POP POP PUSH1 0x6 SLOAD PUSH1 0xA SLOAD PUSH1 0xB SLOAD SWAP4 SWAP5 POP PUSH2 0x3FB2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 POP SWAP1 DUP3 AND SWAP2 AND PUSH2 0x25A6 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP1 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3FD7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x3FEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4009 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x401E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4033 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4047 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 DUP2 MSTORE POP POP POP DUP5 SWAP2 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x406B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT DUP1 ISZERO PUSH2 0x4094 JUMPI POP PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x408A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x40A8 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2C9B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x40BA JUMPI POP DUP9 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x41BC JUMPI DUP7 DUP6 ISZERO PUSH2 0x411F JUMPI PUSH2 0x40D9 PUSH1 0x2 DUP10 DUP10 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2FF7 JUMPI INVALID JUMPDEST DUP12 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x40E6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP13 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x40FA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP1 SWAP7 POP SWAP5 POP SWAP1 POP DUP1 PUSH2 0x411F JUMPI PUSH1 0x0 SWAP8 POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412C PUSH1 0x1 DUP5 PUSH2 0x2CB8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x4143 PUSH1 0x2 DUP9 DUP11 DUP10 PUSH2 0x43A7 JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x415F DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST PUSH1 0xA SLOAD SWAP10 ADD SWAP9 PUSH2 0x4179 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 PUSH2 0x45C5 JUMP JUMPDEST DUP7 DUP6 EQ ISZERO PUSH2 0x4191 JUMPI PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP PUSH2 0x41BC JUMP JUMPDEST PUSH2 0x41A1 DUP15 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP14 POP PUSH2 0x41AE PUSH1 0x1 DUP10 PUSH2 0x457D JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x40AB JUMP JUMPDEST DUP2 ISZERO PUSH2 0x41D9 JUMPI PUSH1 0xB SLOAD PUSH2 0x41D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP5 PUSH2 0x36EC JUMP JUMPDEST DUP5 DUP1 ISZERO PUSH2 0x41E6 JUMPI POP PUSH1 0x0 DUP8 GT JUMPDEST DUP1 ISZERO PUSH2 0x41F2 JUMPI POP DUP9 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x4242 JUMPI PUSH2 0x420A PUSH1 0x2 DUP9 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x314E JUMPI INVALID JUMPDEST DUP11 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4217 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x422B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE SWAP2 SWAP9 POP SWAP5 POP SWAP3 POP JUMPDEST DUP4 ISZERO PUSH2 0x3271 JUMPI DUP7 ISZERO PUSH2 0x428D JUMPI PUSH2 0x4286 DUP8 DUP6 DUP9 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x4260 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x4275 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP14 PUSH1 0x9 SLOAD PUSH2 0x5053 JUMP JUMPDEST POP SWAP1 SWAP8 POP SWAP4 POP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xB SLOAD PUSH2 0x42AD SWAP2 DUP11 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND DUP8 DUP8 PUSH2 0x4820 JUMP JUMPDEST DUP7 ISZERO DUP1 PUSH2 0x42C1 JUMPI POP DUP9 PUSH2 0x42BE PUSH2 0x1483 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH2 0x3271 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1CD95B1B081D1BC81D185C99D95D0819985A5B1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4333 PUSH1 0xA DUP6 SWAP1 EXP PUSH2 0x2E71 DUP8 PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP10 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x5105 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x4361 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434D PUSH2 0x4348 PUSH2 0x4392 DUP6 PUSH2 0x2E71 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x3D64 PUSH3 0x3CDA20 DUP2 DUP14 DUP14 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x2B9D PUSH1 0x9 PUSH2 0x3D64 DUP11 DUP1 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x43C4 DUP10 DUP10 DUP10 PUSH1 0x9 SLOAD PUSH1 0xE SLOAD PUSH1 0xF SLOAD DUP13 PUSH2 0x37F1 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP PUSH2 0x43DF PUSH2 0x43D7 DUP11 PUSH2 0x273D JUMP JUMPDEST DUP7 DUP7 DUP11 PUSH2 0x5156 JUMP JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4422 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x4464 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x443D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4451 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4428 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x447D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x4494 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4468 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD DUP4 MLOAD ADD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x44DE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x452D JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x44F9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x450D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x44E4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x4546 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP7 MLOAD ADD DUP2 MLOAD DUP2 LT PUSH2 0x455D JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4531 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x45A3 JUMPI DUP1 PUSH2 0x45BE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x15AB88C9 PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0xAD5C4648 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x460A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x461E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4634 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3B40 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4704 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4679 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x46FF DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x46DE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x46F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4735 JUMP JUMPDEST PUSH2 0x4735 DUP6 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4714 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4728 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x463B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x474E DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x480C JUMPI PUSH2 0x478B PUSH2 0x4773 PUSH1 0xA DUP8 SWAP1 EXP PUSH2 0x2E71 DUP12 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 PUSH1 0xA DUP9 SWAP1 EXP PUSH2 0x2E71 DUP13 DUP12 PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x479C JUMPI PUSH1 0x1 PUSH2 0x479E JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x139BDD08115B9BDD59DA0813DD5D1C1D5D08105B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4800 DUP11 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x295C AND JUMP JUMPDEST SWAP4 POP DUP9 DUP3 ADD SWAP3 POP PUSH2 0x4813 JUMP JUMPDEST DUP10 SWAP4 POP DUP9 SWAP3 POP JUMPDEST POP SWAP7 POP SWAP7 POP SWAP7 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x4838 SWAP1 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH2 0x39BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4889 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x489D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x48B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ PUSH2 0x48CF JUMPI DUP3 PUSH1 0x0 PUSH2 0x48D3 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAD5C4648 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4927 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x493B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND SWAP1 DUP8 AND EQ ISZERO PUSH2 0x4AC5 JUMPI PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x1FAC4F7B PUSH1 0xE2 SHL DUP4 MSTORE PUSH1 0x24 DUP3 ADD DUP8 DUP2 MSTORE PUSH1 0x44 DUP4 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x84 DUP6 ADD SWAP1 DUP2 MSTORE DUP5 MLOAD PUSH1 0xA4 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP8 AND SWAP7 PUSH4 0x7EB13DEC SWAP7 DUP12 SWAP7 DUP12 SWAP7 SWAP5 SWAP6 SWAP1 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xC4 DUP7 ADD SWAP3 SWAP2 DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49F1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x49D9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4A1E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2E1A7D4D DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4AB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x4AC0 DUP9 DUP6 PUSH2 0x4F46 JUMP JUMPDEST PUSH2 0x4BCA JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x7EB13DEC SWAP2 DUP7 SWAP2 DUP7 SWAP2 DUP14 SWAP2 SWAP1 POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B62 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B4A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4B8F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4BB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4BC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x6 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFFF6CAE9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4C1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4C2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x13 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 DUP2 SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP5 DUP4 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 PUSH2 0x4CB6 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE DUP4 DUP3 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x4CEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4CC3 DUP6 DUP6 PUSH2 0x5542 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 DUP2 KECCAK256 DUP8 SWAP1 SSTORE DUP7 DUP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SSTORE POP POP JUMPDEST POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD SWAP8 DUP6 MSTORE DUP5 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP8 DUP7 MSTORE DUP5 MSTORE DUP3 DUP6 KECCAK256 SWAP8 DUP6 MSTORE SWAP7 DUP4 MSTORE SWAP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP3 SWAP1 MSTORE SWAP1 MSTORE DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP7 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 DUP6 MSTORE SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP1 DUP3 LT PUSH2 0x4DBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207175657565 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP1 PUSH1 0x1 DUP5 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4E28 JUMPI DUP6 DUP4 EQ ISZERO PUSH2 0x4DF9 JUMPI PUSH2 0x4E28 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP4 SWAP1 SSTORE DUP3 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4DE4 JUMP JUMPDEST POP DUP1 DUP6 EQ PUSH2 0x4E6C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642064617461 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP5 DUP2 MSTORE PUSH1 0x1 DUP1 DUP7 MSTORE DUP3 DUP3 KECCAK256 SWAP5 DUP3 MSTORE SWAP4 SWAP1 SWAP5 MSTORE SWAP1 SWAP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4EBE DUP5 DUP5 PUSH2 0x5542 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 DUP4 EQ PUSH2 0x4F06 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x496E76616C6964207072696365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP5 DUP4 MSTORE DUP4 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 DUP2 SWAP1 SSTORE SWAP4 DUP5 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x4F92 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4F73 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4FF4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4FF9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x36E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58D1 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7D DUP4 PUSH2 0x2E71 DUP7 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5064 DUP9 DUP9 DUP8 PUSH2 0x5515 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 GT ISZERO PUSH2 0x480C JUMPI PUSH2 0x50A1 PUSH2 0x5089 DUP3 PUSH2 0x2E71 DUP11 PUSH1 0xA DUP11 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST PUSH2 0x3967 DUP9 PUSH2 0x2E71 DUP12 PUSH1 0xA DUP12 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 GT PUSH2 0x50B2 JUMPI PUSH1 0x1 PUSH2 0x50B4 JUMP JUMPDEST DUP2 JUMPDEST SWAP2 POP DUP2 DUP11 LT ISZERO PUSH2 0x47F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x139BDD08115B9BDD59DA08125B9C1D5D08105B5BDD5B9D PUSH1 0x4A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x5148 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5142 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x5131 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x513A JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x511A JUMP JUMPDEST POP PUSH2 0x275D JUMP JUMPDEST DUP2 ISZERO PUSH2 0x275D JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 PUSH1 0x0 DUP1 PUSH2 0x5167 DUP10 DUP8 PUSH2 0x4C4A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5195 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x60 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x51C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP3 DUP5 LT DUP1 ISZERO PUSH2 0x51D7 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x542B JUMPI PUSH1 0x0 PUSH2 0x51E8 DUP13 DUP11 PUSH2 0x55E4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x51F5 JUMPI POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x51FD PUSH2 0x5859 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD AND SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE DUP5 MLOAD DUP6 SWAP1 DUP9 SWAP1 DUP2 LT PUSH2 0x527F 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 PUSH1 0x0 DUP2 PUSH1 0xA0 ADD MLOAD DUP9 GT PUSH2 0x52B2 JUMPI DUP8 PUSH2 0x52B8 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD JUMPDEST SWAP1 POP DUP1 DUP3 PUSH1 0xA0 ADD MLOAD SUB DUP3 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 DUP5 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x52D7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD SWAP8 DUP2 SWAP1 SUB SWAP8 ISZERO PUSH2 0x5399 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH1 0x10 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x5 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA892D68F8384663266856EFCC4ED863CA1D9D7E373285F93BD251549EB82490E DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x542B JUMP JUMPDEST PUSH2 0x53A2 DUP3 PUSH2 0x5643 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD34322DF57B73514D4BA1028D9EDEEB8BFC03224B8035B6C1BFE04FB0F06A55C DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x51C8 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x5507 JUMPI PUSH2 0x543B DUP3 DUP6 PUSH2 0x570F JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5467 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP DUP1 MLOAD DUP7 MLOAD GT ISZERO PUSH2 0x54B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x125B99195E08125B9D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x5505 JUMPI PUSH2 0x54E6 DUP11 PUSH2 0x2E71 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x54CF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 PUSH2 0x34CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x54F2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x54B4 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x45BE JUMPI DUP4 PUSH2 0x5532 DUP5 PUSH1 0xA DUP6 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x34CF AND JUMP JUMPDEST DUP2 PUSH2 0x5539 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x1 DUP5 EQ ISZERO PUSH2 0x559F JUMPI JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x559A JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x5595 JUMPI PUSH2 0x559A JUMP JUMPDEST PUSH2 0x5566 JUMP JUMPDEST PUSH2 0x55DD JUMP JUMPDEST PUSH1 0x2 DUP5 EQ ISZERO PUSH2 0x55DD JUMPI JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x55DD JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x55D8 JUMPI PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x55A9 JUMP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x5655 DUP2 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x57E0 JUMP JUMPDEST POP PUSH1 0x40 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x7 ADD DUP3 SWAP1 SSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x11 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xE0 DUP3 ADD MLOAD DUP2 GT PUSH2 0x3602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0xD2DCECC2D8D2C840DEE4C8CAE492DCC8CAF PUSH1 0x73 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 MLOAD DUP3 GT ISZERO PUSH2 0x5758 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x92DCECC2D8D2C840D8CADCCEE8D PUSH1 0x93 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 MLOAD DUP3 EQ ISZERO PUSH2 0x5768 JUMPI POP DUP2 PUSH2 0x2737 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5792 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x44A7 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x57AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x57C0 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5798 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP6 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP6 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP1 DUP3 EQ PUSH2 0x563B JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 DUP2 MSTORE DUP3 DUP3 KECCAK256 DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE SWAP6 DUP3 MSTORE PUSH1 0x1 DUP1 DUP3 MSTORE DUP4 DUP4 KECCAK256 SWAP6 DUP4 MSTORE SWAP5 SWAP1 MSTORE KECCAK256 DUP1 SLOAD SWAP1 SWAP3 ADD SWAP1 SWAP2 SSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP INVALID SWAP14 CALLVALUE 0xEE 0xE0 0xC3 LOG3 0xCD 0x21 ORIGIN 0xD4 0x29 DUP8 0x2E PC XOR EXTCODESIZE SIGNEXTEND LOG2 SWAP7 0xCD 0xBA BLOCKHASH SWAP5 DUP4 EXP 0xA5 DUP11 SWAP16 0xB3 COINBASE PUSH9 0xEF5472616E73666572 0x48 PUSH6 0x6C7065723A20 GASLIMIT SLOAD 0x48 0x5F SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0x5C 0xEA 0x5D 0x2C 0xCC 0xE1 PUSH11 0xAB6226DE87935AFEA61FF CREATE DUP15 ISZERO DUP11 JUMP DUP4 LOG1 CALL 0xE0 LOG1 DELEGATECALL 0x49 BLOCKHASH CODESIZE PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP6 DUP4 EXTCODECOPY PUSH6 0x3C44BD78EBDF SELFDESTRUCT PUSH7 0x245D6D0BC9A270 0xEC 0xCF RETURN PUSH5 0x8139AF818B PUSH25 0x9728A864736F6C634300051000320000000000000000000000 ",
          "sourceMap": "103:1994:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;103:1994:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;159:67;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;159:67:2;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;159:67:2;;;;;;;;;;;;;;773:1193;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;773:1193:2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;635:105;;;:::i;:::-;;;;;;;;;;;;;;;;233:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;233:30:2;;:::i;1974:120::-;;;:::i;303:19::-;;;:::i;270:26::-;;;:::i;159:67::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;159:67:2;;:::o;773:1193::-;910:10;-1:-1:-1;;;;;897:23:2;:9;-1:-1:-1;;;;;897:23:2;;;889:59;;;;;-1:-1:-1;;;889:59:2;;;;;;;;;;;;-1:-1:-1;;;889:59:2;;;;;;;;;;;;;;;960:14;976;1006:10;-1:-1:-1;;;;;994:22:2;:9;-1:-1:-1;;;;;994:22:2;;:74;;1046:10;1058:9;994:74;;;1020:9;1031:10;994:74;959:109;;-1:-1:-1;959:109:2;-1:-1:-1;;;;;;1087:20:2;;1079:49;;;;;-1:-1:-1;;;1079:49:2;;;;;;;;;;;;-1:-1:-1;;;1079:49:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;1147:20:2;;;1187:1;1147:20;;;;;;;;;;;:28;;;;;;;;;;;;:42;1139:76;;;;;-1:-1:-1;;;1139:76:2;;;;;;;;;;;;-1:-1:-1;;;1139:76:2;;;;;;;;;;;;;;;1261:11;;1243:54;;;-1:-1:-1;;;1243:54:2;;-1:-1:-1;;;;;1243:54:2;;;;;;;;;;;;;;;;1228:12;;1261:11;;;;;1243:38;;:54;;;;;;;;;;;;;;;1261:11;1243:54;;;5:2:-1;;;;30:1;27;20:12;5:2;1243:54:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1243:54:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1243:54:2;;-1:-1:-1;;;;;;1316:18:2;;1308:56;;;;;-1:-1:-1;;;1308:56:2;;;;;;;;;;;;-1:-1:-1;;;1308:56:2;;;;;;;;;;;;;;;1375:21;1399:28;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;1399:28:2;1375:52;;1438:12;1480:6;1488;1463:32;;;;;;-1:-1:-1;;;;;1463:32:2;-1:-1:-1;;;;;1463:32:2;;;;;;;;-1:-1:-1;;;;;1463:32:2;-1:-1:-1;;;;;1463:32:2;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1463:32:2;;;1453:43;;;;;;1438:58;;1507:17;1619:4;1608:8;1602:15;1597:2;1587:8;1583:17;1580:1;1572:52;1645:83;;;-1:-1:-1;;;1645:83:2;;-1:-1:-1;;;;;1645:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1559:65;;-1:-1:-1;1645:32:2;;;;;;:83;;;;;-1:-1:-1;;1645:83:2;;;;;;;;-1:-1:-1;1645:32:2;:83;;;5:2:-1;;;;30:1;27;20:12;5:2;1645:83:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;1740:20:2;;;:12;:20;;;;;;;;;;;:28;;;;;;;;;;1770:20;;;;;;:28;;;;;;;;;1739:85;;;;;-1:-1:-1;;;;;;1739:85:2;;;;;;;;;;;;;;;;;;27:10:-1;;23:18;;;45:23;;1835:29:2;;;;;;;;;;;;;;;;1880:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1880:78:2;;;;;;;;;;;;;773:1193;;;;;;;;;;:::o;635:105::-;712:13;:20;635:105;:::o;233:30::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;233:30:2;;-1:-1:-1;233:30:2;:::o;1974:120::-;2020:7;2057:28;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;2057:28:2;2047:39;;;;;;2040:46;;1974:120;:::o;303:19::-;;;-1:-1:-1;;;;;303:19:2;;:::o;270:26::-;;;-1:-1:-1;;;;;270:26:2;;:::o;103:1994::-;;;;;;;;:::o"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_WETH\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"orderBook\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderBookCreated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"allOrderBookLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allOrderBooks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"priceStep\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"}],\"name\":\"createOrderBook\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getOrderBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pairFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/OrderBookFactory.sol\":\"OrderBookFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/OrderBook.sol\":{\"keccak256\":\"0x5eb70ddccf4bd07be31efe9d4f7de0b5f4bed81f8daf56ac063049dd3e79f0c0\",\"urls\":[\"bzz-raw://141840d6730627c871e0aa7e843234d39ac2ca37cba6d864e248e1c435ade2ab\",\"dweb:/ipfs/QmaZiLgNRBMosGdJHd8HMDthYhQVx6JBg59Z7MU8UruQt2\"]},\"contracts/OrderBookBase.sol\":{\"keccak256\":\"0xd0b4c994c9dcf3dede743375df588228da108bb06a90c6082aecd4b1ea26d27d\",\"urls\":[\"bzz-raw://87b8b068299afd3df1ace44241f532b77a8c1070d239ce1c3333d50dd73d9225\",\"dweb:/ipfs/QmYKqbUDHqZP6yUmDw9TqGiG2xZeTLjnuXjJcyJpEohPSs\"]},\"contracts/OrderBookFactory.sol\":{\"keccak256\":\"0xbf6a2f761f7acdb3f1625cb3b305d8b591372ee9d9a343bf56362f333c180807\",\"urls\":[\"bzz-raw://4375568043045a908b202a94252af39425c8a71797d5ce84f6d2b6e360ac4ee4\",\"dweb:/ipfs/QmcxvRQr5mEw9iXAYqEEDR6tdnNFikevgXS1DY9z4hj1bC\"]},\"contracts/OrderQueue.sol\":{\"keccak256\":\"0xff95f47ee4f3cbbe23fb7053e0c37f0b5a1c7956c4bb02a485e45f2af18f71e0\",\"urls\":[\"bzz-raw://b8c4b29969132a3d23e39d7714e2fb67f24fbd2228814dec6bcb5c804b60d47d\",\"dweb:/ipfs/Qmd3yArMBcUAd91LBGA3yahwdQWRcMSpvMP3kwg7haFkzr\"]},\"contracts/PriceList.sol\":{\"keccak256\":\"0x6fd878052bb8499a721cae3d9e3d8f865bb276c62b438cb6d3f2af6f34888fad\",\"urls\":[\"bzz-raw://17010905206b30d535c293c05e0530e7ffdb3667f7c5a927138b67ad470cf813\",\"dweb:/ipfs/QmXXxxKz9YRc9tLiaSA3QnM8sGccFMgYH9G8ScxMTJgbTZ\"]},\"contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xa791b279660ee5eb66ebd4f23b539055d178ae24677f3a164567441ecfdcf73a\",\"urls\":[\"bzz-raw://06f36f585a8b82eb388ccccc4e8c483718a99a07f5f12d3217afc254ab139a68\",\"dweb:/ipfs/Qmedr3aAH6F3ZTgZJ3enoP92ZD8yNwiCStwtGknNXhiK8v\"]},\"contracts/interfaces/IOrderBook.sol\":{\"keccak256\":\"0x88c44365451e69c40779ed92c98b683b8d8e2b1689ffe4c2d388faf476fe1314\",\"urls\":[\"bzz-raw://5d1f23ba83fb1960400c70362b5f0bcae2fb26d8c8d581a9b8164d8d91fdb325\",\"dweb:/ipfs/QmTY1cYugvuWb5VinnxQZkLgRTZ9yXFs6ivk2obwvzrNGJ\"]},\"contracts/interfaces/IOrderBookFactory.sol\":{\"keccak256\":\"0x35de3f95ee0847aaf2a398e43acaa993f3f38ec89a02546993a338418c14276f\",\"urls\":[\"bzz-raw://6b87e84de0469baa8c646769d164ae4241311ddb36d61f495e0ef3233d9e41f4\",\"dweb:/ipfs/QmYMBYbH6zPLzfnf43wiyBftSuzpPAwAz1cVQBm7qpsMmU\"]},\"contracts/interfaces/IUniswapV2Factory.sol\":{\"keccak256\":\"0x7b2a8203923ba2af5ec2ea54f655ac40fc32c9bc5b00ed01058326fc212763c4\",\"urls\":[\"bzz-raw://72d5966709eec21964685c47b8ee017e22ae9f616b516e77f0754259d01690ec\",\"dweb:/ipfs/QmS4gyruWoRR3Ab2enF9omwpmFXcZXSB3c9azNRM7cYNop\"]},\"contracts/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x581f0f810f88942f26211b503fdabb786826abb59741624cf985c09ee6a76e03\",\"urls\":[\"bzz-raw://d7b6d788a4524585bdfb8b6a7213d46284a81f896e011143b2acacbbd5c7a1e0\",\"dweb:/ipfs/QmayLfvKFDQQAEbK2zyfoe3KDz9EdH8nnwVYqTDbvCtncA\"]},\"contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0x25ed8b4dd0b9382d61501d7fe6f30ea65e6800907ba4a5a0f280e79c80bdfd86\",\"urls\":[\"bzz-raw://72c047f1ad25724c269cfb87f9291558a2723d90ef8b25224caf84e04123a52f\",\"dweb:/ipfs/QmXjW9nmRTasWKYGMnQRBGRHJg2AbT6Z4azWowuST1bLu3\"]},\"contracts/libraries/Arrays.sol\":{\"keccak256\":\"0x31f2775eea5fe5e81a014fbf8b244f4cd2e24f6fb8ebe837095ba63ed594765b\",\"urls\":[\"bzz-raw://30330f7e9ca3f4b04273713517d9392b6f6f65bdef011893fa1b1ca455a6d286\",\"dweb:/ipfs/Qmd5F2W2pc7wVFcNTsULT6cQcqwijy3SLcMYU3mG9q5GbD\"]},\"contracts/libraries/Math.sol\":{\"keccak256\":\"0xccbb532d91028652fd3b3df3ae1b02ba0ab62af320270c702587816501e6d219\",\"urls\":[\"bzz-raw://49e097b670fa636d85b6da78f645462d33b1d9f334a290e70ff76a1705e08877\",\"dweb:/ipfs/QmTywL9AbXJMHoYsiyyUdftnc4hig4y2srNJifgCHth3LH\"]},\"contracts/libraries/OrderBookLibrary.sol\":{\"keccak256\":\"0x4b636198fcc43ea259db9c255f2c479e67cda5b79144d425f3f12bd337bd7bc3\",\"urls\":[\"bzz-raw://cfda742ee6730d24dfbe5b76cab91ce06ffdf0f451e8a8cc7b29bb87fbbda277\",\"dweb:/ipfs/QmVqyAAsVmPGq7AqCuxeWKRFDVfgGKhw7t5MPvTL1onJwi\"]},\"contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x2ec47d2360eaf97d08df4e022201f5ab70e1e1feeb2b7da46b43fab649898a39\",\"urls\":[\"bzz-raw://56be45e5cc62e8e48567ada0407699c2826665359eed633da14d00f67efd95bc\",\"dweb:/ipfs/QmXrXoZ9Ho8SdWjXC2BEzDiDVURPTTzBXiqfcPnQsg1GSB\"]},\"contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x43ca45ce883d480bab2394b7cc50633c713a5bf77496fe55e0dd1373b4cbddf8\",\"urls\":[\"bzz-raw://a86702c285ff5a32f3195bab61af9a0e78f44423d737a9f904cd3077e018f344\",\"dweb:/ipfs/QmZTWpAZXzDaNjdLTMHduK97KNvv2uCWXoeb7nXitv3PLZ\"]},\"contracts/libraries/UQ112x112.sol\":{\"keccak256\":\"0x394bda0ad101756150be3737eb405eec14da4bd756e8a65f5a110f73565f5dcd\",\"urls\":[\"bzz-raw://c0b40cd3cf66546fb5854ee374aa2a40e6103a2b2616cee3c27ce80dcb76d5bf\",\"dweb:/ipfs/QmfURbSAc6ZTekkrfGdkCqv6bU27dfnbVKgSDqHHavGCae\"]}},\"version\":1}",
      "interface": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_factory",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_WETH",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "pair",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "orderBook",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderBookCreated",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "WETH",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "allOrderBookLength",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "allOrderBooks",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            }
          ],
          "name": "createOrderBook",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getCodeHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "getOrderBook",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pairFactory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "bytecode": "608060405234801561001057600080fd5b506040516160173803806160178339818101604052604081101561003357600080fd5b508051602090910151600380546001600160a01b039283166001600160a01b03199182161790915560028054929093169116179055615fa0806100776000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063203d39ff146100725780632c67be04146100bc578063316cc2dd146100fa578063472c66701461011457806383dd41c614610131578063ad5c464814610139578063e14f870d14610141575b600080fd5b6100a06004803603604081101561008857600080fd5b506001600160a01b0381358116916020013516610149565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360808110156100d257600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561016c565b005b61010261058f565b60408051918252519081900360200190f35b6100a06004803603602081101561012a57600080fd5b5035610595565b6101026105bc565b6100a06105ee565b6100a06105fd565b60006020818152928152604080822090935290815220546001600160a01b031681565b826001600160a01b0316846001600160a01b031614156101cd576040805162461bcd60e51b81526020600482015260176024820152764f463a204944454e544943414c5f41444452455353455360481b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b0316106101f05784866101f3565b85855b90925090506001600160a01b038216610246576040805162461bcd60e51b815260206004820152601060248201526f4f463a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b03828116600090815260208181526040808320858516845290915290205416156102b6576040805162461bcd60e51b81526020600482015260156024820152744f463a204f524445525f424f4f4b5f45584953545360581b604482015290519081900360640190fd5b6002546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561030f57600080fd5b505afa158015610323573d6000803e3d6000fd5b505050506040513d602081101561033957600080fd5b505190506001600160a01b038116610394576040805162461bcd60e51b81526020600482015260196024820152784f463a20544f4b454e5f504149525f4e4f545f45584953545360381b604482015290519081900360640190fd5b6060604051806020016103a69061060c565b6020820181038252601f19601f8201166040525090506000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506000818351602085016000f5604080516314d6c7d760e31b81526001600160a01b0387811660048301528d811660248301528c81166044830152606482018c9052608482018b905291519293509083169163a6b63eb89160a48082019260009290919082900301818387803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b5050506001600160a01b038088166000818152602081815260408083208b86168452825280832083835281842094845293825280832080548689166001600160a01b0319918216811790925585548116821790955560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69093018054909416831790935582518985168152908101919091528082018c9052606081018b905290518c83169350918d16917fff812ff6839ab5e7ba32b4568a74ecad57d67a429ced4ff78aa7522f705f9db59181900360800190a350505050505050505050565b60015490565b600181815481106105a257fe5b6000918252602090912001546001600160a01b0316905081565b6000604051806020016105ce9061060c565b6020820181038252601f19601f8201166040525080519060200120905090565b6003546001600160a01b031681565b6002546001600160a01b031681565b6159528061061a8339019056fe60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032a265627a7a7231582085833c653c44bd78ebdfff66245d6d0bc9a270eccff3648139af818b789728a864736f6c63430005100032",
      "bin": "608060405234801561001057600080fd5b506040516160173803806160178339818101604052604081101561003357600080fd5b508051602090910151600380546001600160a01b039283166001600160a01b03199182161790915560028054929093169116179055615fa0806100776000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063203d39ff146100725780632c67be04146100bc578063316cc2dd146100fa578063472c66701461011457806383dd41c614610131578063ad5c464814610139578063e14f870d14610141575b600080fd5b6100a06004803603604081101561008857600080fd5b506001600160a01b0381358116916020013516610149565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360808110156100d257600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561016c565b005b61010261058f565b60408051918252519081900360200190f35b6100a06004803603602081101561012a57600080fd5b5035610595565b6101026105bc565b6100a06105ee565b6100a06105fd565b60006020818152928152604080822090935290815220546001600160a01b031681565b826001600160a01b0316846001600160a01b031614156101cd576040805162461bcd60e51b81526020600482015260176024820152764f463a204944454e544943414c5f41444452455353455360481b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b0316106101f05784866101f3565b85855b90925090506001600160a01b038216610246576040805162461bcd60e51b815260206004820152601060248201526f4f463a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b03828116600090815260208181526040808320858516845290915290205416156102b6576040805162461bcd60e51b81526020600482015260156024820152744f463a204f524445525f424f4f4b5f45584953545360581b604482015290519081900360640190fd5b6002546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561030f57600080fd5b505afa158015610323573d6000803e3d6000fd5b505050506040513d602081101561033957600080fd5b505190506001600160a01b038116610394576040805162461bcd60e51b81526020600482015260196024820152784f463a20544f4b454e5f504149525f4e4f545f45584953545360381b604482015290519081900360640190fd5b6060604051806020016103a69061060c565b6020820181038252601f19601f8201166040525090506000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506000818351602085016000f5604080516314d6c7d760e31b81526001600160a01b0387811660048301528d811660248301528c81166044830152606482018c9052608482018b905291519293509083169163a6b63eb89160a48082019260009290919082900301818387803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b5050506001600160a01b038088166000818152602081815260408083208b86168452825280832083835281842094845293825280832080548689166001600160a01b0319918216811790925585548116821790955560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69093018054909416831790935582518985168152908101919091528082018c9052606081018b905290518c83169350918d16917fff812ff6839ab5e7ba32b4568a74ecad57d67a429ced4ff78aa7522f705f9db59181900360800190a350505050505050505050565b60015490565b600181815481106105a257fe5b6000918252602090912001546001600160a01b0316905081565b6000604051806020016105ce9061060c565b6020820181038252601f19601f8201166040525080519060200120905090565b6003546001600160a01b031681565b6002546001600160a01b031681565b6159528061061a8339019056fe60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032a265627a7a7231582085833c653c44bd78ebdfff66245d6d0bc9a270eccff3648139af818b789728a864736f6c63430005100032",
      "bin-runtime": "608060405234801561001057600080fd5b506004361061006d5760003560e01c8063203d39ff146100725780632c67be04146100bc578063316cc2dd146100fa578063472c66701461011457806383dd41c614610131578063ad5c464814610139578063e14f870d14610141575b600080fd5b6100a06004803603604081101561008857600080fd5b506001600160a01b0381358116916020013516610149565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360808110156100d257600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561016c565b005b61010261058f565b60408051918252519081900360200190f35b6100a06004803603602081101561012a57600080fd5b5035610595565b6101026105bc565b6100a06105ee565b6100a06105fd565b60006020818152928152604080822090935290815220546001600160a01b031681565b826001600160a01b0316846001600160a01b031614156101cd576040805162461bcd60e51b81526020600482015260176024820152764f463a204944454e544943414c5f41444452455353455360481b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b0316106101f05784866101f3565b85855b90925090506001600160a01b038216610246576040805162461bcd60e51b815260206004820152601060248201526f4f463a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b03828116600090815260208181526040808320858516845290915290205416156102b6576040805162461bcd60e51b81526020600482015260156024820152744f463a204f524445525f424f4f4b5f45584953545360581b604482015290519081900360640190fd5b6002546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561030f57600080fd5b505afa158015610323573d6000803e3d6000fd5b505050506040513d602081101561033957600080fd5b505190506001600160a01b038116610394576040805162461bcd60e51b81526020600482015260196024820152784f463a20544f4b454e5f504149525f4e4f545f45584953545360381b604482015290519081900360640190fd5b6060604051806020016103a69061060c565b6020820181038252601f19601f8201166040525090506000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506000818351602085016000f5604080516314d6c7d760e31b81526001600160a01b0387811660048301528d811660248301528c81166044830152606482018c9052608482018b905291519293509083169163a6b63eb89160a48082019260009290919082900301818387803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b5050506001600160a01b038088166000818152602081815260408083208b86168452825280832083835281842094845293825280832080548689166001600160a01b0319918216811790925585548116821790955560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69093018054909416831790935582518985168152908101919091528082018c9052606081018b905290518c83169350918d16917fff812ff6839ab5e7ba32b4568a74ecad57d67a429ced4ff78aa7522f705f9db59181900360800190a350505050505050505050565b60015490565b600181815481106105a257fe5b6000918252602090912001546001600160a01b0316905081565b6000604051806020016105ce9061060c565b6020820181038252601f19601f8201166040525080519060200120905090565b6003546001600160a01b031681565b6002546001600160a01b031681565b6159528061061a8339019056fe60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008160a0015188116152b257876152b8565b8160a001515b9050808260a00151038260a0018181525050808488815181106152d757fe5b602090810291909101015260a0820151978190039715615399578160a00151601060008581526020019081526020016000206005018190555081602001516001600160a01b031682600001516001600160a01b03167fa892d68f8384663266856efcc4ed863ca1d9d7e373285f93bd251549eb82490e846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001909401935061542b565b6153a282615643565b81602001516001600160a01b031682600001516001600160a01b03167fd34322df57b73514d4ba1028d9edeeb8bfc03224b8035b6c1bfe04fb0f06a55c846060015185608001518660a001518760c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050600190940193506151c8565b83156155075761543b828561570f565b965083604051908082528060200260200182016040528015615467578160200160208202803883390190505b5095508051865111156154b1576040805162461bcd60e51b815260206004820152600d60248201526c125b99195e08125b9d985b1a59609a1b604482015290519081900360640190fd5b60005b84811015615505576154e68a612e718484815181106154cf57fe5b60200260200101518e6134cf90919063ffffffff16565b8782815181106154f257fe5b60209081029190910101526001016154b4565b505b505050505094509492505050565b600083156145be578361553284600a85900a63ffffffff6134cf16565b8161553957fe5b04949350505050565b6000828152600360209081526040808320838052909152812054600184141561559f575b8281111561559a576000848152600360209081526040808320848452909152902054909150806155955761559a565b615566565b6155dd565b60028414156155dd575b828110156155dd576000848152600360209081526040808320848452909152902054909150806155d8576155dd565b6155a9565b9250929050565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b57600085815260208181526040808320878452825280832085845290915290205492505b505092915050565b6156558160c0015182606001516157e0565b5060408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b60608251821115615758576040805162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015290519081900360640190fd5b8251821415615768575081612737565b81604051908082528060200260200182016040528015615792578160200160208202803883390190505b50905060005b828110156144a7578381815181106157ac57fe5b60200260200101518282815181106157c057fe5b6001600160a01b0390921660209283029190910190910152600101615798565b60008281526001602090815260408083208484528252808320548584526002835281842085855290925282205480821461563b5750600084815260208181526040808320868452825280832093835292815282822080549083905595825260018082528383209583529490522080549092019091555090565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe9d34eee0c3a3cd2132d429872e58183b0ba296cdba4094830aa58a9fb34168ef5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158205cea5d2ccce16a0ab6226de87935afea61fff08e158a5683a1f1e0a1f449403864736f6c63430005100032a265627a7a7231582085833c653c44bd78ebdfff66245d6d0bc9a270eccff3648139af818b789728a864736f6c63430005100032",
      "srcmap": "103:1994:2:-;;;517:110;8:9:-1;5:2;;;30:1;27;20:12;5:2;517:110:2;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;517:110:2;;;;;;;594:4;580:39;;-1:-1:-1;;;;;580:39:2;;;-1:-1:-1;;;;;;580:39:2;;;;;;;581:11;580:39;;;;;;;;;;;103:1994;;;;;;",
      "srcmap-runtime": "103:1994:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;103:1994:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;159:67;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;159:67:2;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;159:67:2;;;;;;;;;;;;;;773:1193;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;773:1193:2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;635:105;;;:::i;:::-;;;;;;;;;;;;;;;;233:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;233:30:2;;:::i;1974:120::-;;;:::i;303:19::-;;;:::i;270:26::-;;;:::i;159:67::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;159:67:2;;:::o;773:1193::-;910:10;-1:-1:-1;;;;;897:23:2;:9;-1:-1:-1;;;;;897:23:2;;;889:59;;;;;-1:-1:-1;;;889:59:2;;;;;;;;;;;;-1:-1:-1;;;889:59:2;;;;;;;;;;;;;;;960:14;976;1006:10;-1:-1:-1;;;;;994:22:2;:9;-1:-1:-1;;;;;994:22:2;;:74;;1046:10;1058:9;994:74;;;1020:9;1031:10;994:74;959:109;;-1:-1:-1;959:109:2;-1:-1:-1;;;;;;1087:20:2;;1079:49;;;;;-1:-1:-1;;;1079:49:2;;;;;;;;;;;;-1:-1:-1;;;1079:49:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;1147:20:2;;;1187:1;1147:20;;;;;;;;;;;:28;;;;;;;;;;;;:42;1139:76;;;;;-1:-1:-1;;;1139:76:2;;;;;;;;;;;;-1:-1:-1;;;1139:76:2;;;;;;;;;;;;;;;1261:11;;1243:54;;;-1:-1:-1;;;1243:54:2;;-1:-1:-1;;;;;1243:54:2;;;;;;;;;;;;;;;;1228:12;;1261:11;;;;;1243:38;;:54;;;;;;;;;;;;;;;1261:11;1243:54;;;5:2:-1;;;;30:1;27;20:12;5:2;1243:54:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1243:54:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1243:54:2;;-1:-1:-1;;;;;;1316:18:2;;1308:56;;;;;-1:-1:-1;;;1308:56:2;;;;;;;;;;;;-1:-1:-1;;;1308:56:2;;;;;;;;;;;;;;;1375:21;1399:28;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;1399:28:2;1375:52;;1438:12;1480:6;1488;1463:32;;;;;;-1:-1:-1;;;;;1463:32:2;-1:-1:-1;;;;;1463:32:2;;;;;;;;-1:-1:-1;;;;;1463:32:2;-1:-1:-1;;;;;1463:32:2;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1463:32:2;;;1453:43;;;;;;1438:58;;1507:17;1619:4;1608:8;1602:15;1597:2;1587:8;1583:17;1580:1;1572:52;1645:83;;;-1:-1:-1;;;1645:83:2;;-1:-1:-1;;;;;1645:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1559:65;;-1:-1:-1;1645:32:2;;;;;;:83;;;;;-1:-1:-1;;1645:83:2;;;;;;;;-1:-1:-1;1645:32:2;:83;;;5:2:-1;;;;30:1;27;20:12;5:2;1645:83:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;1740:20:2;;;:12;:20;;;;;;;;;;;:28;;;;;;;;;;1770:20;;;;;;:28;;;;;;;;;1739:85;;;;;-1:-1:-1;;;;;;1739:85:2;;;;;;;;;;;;;;;;;;27:10:-1;;23:18;;;45:23;;1835:29:2;;;;;;;;;;;;;;;;1880:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1880:78:2;;;;;;;;;;;;;773:1193;;;;;;;;;;:::o;635:105::-;712:13;:20;635:105;:::o;233:30::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;233:30:2;;-1:-1:-1;233:30:2;:::o;1974:120::-;2020:7;2057:28;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;2057:28:2;2047:39;;;;;;2040:46;;1974:120;:::o;303:19::-;;;-1:-1:-1;;;;;303:19:2;;:::o;270:26::-;;;-1:-1:-1;;;;;270:26:2;;:::o;103:1994::-;;;;;;;;:::o"
    },
    "contracts/OrderQueue.sol:OrderQueue": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820b06030f1e213a3beb4dd23dd9f47d511db4f7015826106e1af8b7e7c424c6bd164736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3E DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xB0 PUSH1 0x30 CALL 0xE2 SGT LOG3 0xBE 0xB4 0xDD 0x23 0xDD SWAP16 SELFBALANCE 0xD5 GT 0xDB 0x4F PUSH17 0x15826106E1AF8B7E7C424C6BD164736F6C PUSH4 0x43000510 STOP ORIGIN ",
          "sourceMap": "28:3545:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28:3545:3;;;;;;;"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "6080604052600080fdfea265627a7a72315820b06030f1e213a3beb4dd23dd9f47d511db4f7015826106e1af8b7e7c424c6bd164736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xB0 PUSH1 0x30 CALL 0xE2 SGT LOG3 0xBE 0xB4 0xDD 0x23 0xDD SWAP16 SELFBALANCE 0xD5 GT 0xDB 0x4F PUSH17 0x15826106E1AF8B7E7C424C6BD164736F6C PUSH4 0x43000510 STOP ORIGIN ",
          "sourceMap": "28:3545:3:-;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/OrderQueue.sol\":\"OrderQueue\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/OrderQueue.sol\":{\"keccak256\":\"0xff95f47ee4f3cbbe23fb7053e0c37f0b5a1c7956c4bb02a485e45f2af18f71e0\",\"urls\":[\"bzz-raw://b8c4b29969132a3d23e39d7714e2fb67f24fbd2228814dec6bcb5c804b60d47d\",\"dweb:/ipfs/Qmd3yArMBcUAd91LBGA3yahwdQWRcMSpvMP3kwg7haFkzr\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820b06030f1e213a3beb4dd23dd9f47d511db4f7015826106e1af8b7e7c424c6bd164736f6c63430005100032",
      "bin": "6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820b06030f1e213a3beb4dd23dd9f47d511db4f7015826106e1af8b7e7c424c6bd164736f6c63430005100032",
      "bin-runtime": "6080604052600080fdfea265627a7a72315820b06030f1e213a3beb4dd23dd9f47d511db4f7015826106e1af8b7e7c424c6bd164736f6c63430005100032",
      "srcmap": "28:3545:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28:3545:3;;;;;;;",
      "srcmap-runtime": "28:3545:3:-;;;;;"
    },
    "contracts/PriceList.sol:PriceList": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820201b055aea36761ec05156d286b827ad55f7d4eeee5727aeecbb3388de8854a864736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3E DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 KECCAK256 SHL SDIV GAS 0xEA CALLDATASIZE PUSH23 0x1EC05156D286B827AD55F7D4EEEE5727AEECBB3388DE88 SLOAD 0xA8 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "28:3404:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28:3404:4;;;;;;;"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "6080604052600080fdfea265627a7a72315820201b055aea36761ec05156d286b827ad55f7d4eeee5727aeecbb3388de8854a864736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 KECCAK256 SHL SDIV GAS 0xEA CALLDATASIZE PUSH23 0x1EC05156D286B827AD55F7D4EEEE5727AEECBB3388DE88 SLOAD 0xA8 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "28:3404:4:-;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/PriceList.sol\":\"PriceList\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/PriceList.sol\":{\"keccak256\":\"0x6fd878052bb8499a721cae3d9e3d8f865bb276c62b438cb6d3f2af6f34888fad\",\"urls\":[\"bzz-raw://17010905206b30d535c293c05e0530e7ffdb3667f7c5a927138b67ad470cf813\",\"dweb:/ipfs/QmXXxxKz9YRc9tLiaSA3QnM8sGccFMgYH9G8ScxMTJgbTZ\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820201b055aea36761ec05156d286b827ad55f7d4eeee5727aeecbb3388de8854a864736f6c63430005100032",
      "bin": "6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820201b055aea36761ec05156d286b827ad55f7d4eeee5727aeecbb3388de8854a864736f6c63430005100032",
      "bin-runtime": "6080604052600080fdfea265627a7a72315820201b055aea36761ec05156d286b827ad55f7d4eeee5727aeecbb3388de8854a864736f6c63430005100032",
      "srcmap": "28:3404:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28:3404:4;;;;;;;",
      "srcmap-runtime": "28:3404:4:-;;;;;"
    },
    "contracts/interfaces/IERC20.sol:IERC20": {
      "abi": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xa791b279660ee5eb66ebd4f23b539055d178ae24677f3a164567441ecfdcf73a\",\"urls\":[\"bzz-raw://06f36f585a8b82eb388ccccc4e8c483718a99a07f5f12d3217afc254ab139a68\",\"dweb:/ipfs/Qmedr3aAH6F3ZTgZJ3enoP92ZD8yNwiCStwtGknNXhiK8v\"]}},\"version\":1}",
      "interface": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "bytecode": "",
      "bin": "",
      "bin-runtime": "",
      "srcmap": "",
      "srcmap-runtime": ""
    },
    "contracts/interfaces/IOrderBook.sol:IOrderBook": {
      "abi": [
        {
          "constant": true,
          "inputs": [],
          "name": "baseDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "cancelLimitOrder",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createBuyLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createSellLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOutOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountInForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountInOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountOutForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserveBase",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserveQuote",
              "type": "uint112"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "name": "getUserOrders",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "orderIds",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "maxSize",
              "type": "uint32"
            }
          ],
          "name": "marketBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "marketOrder",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "order",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "minAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newMinAmount",
              "type": "uint256"
            }
          ],
          "name": "minAmountUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pair",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceStep",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newPriceStep",
              "type": "uint256"
            }
          ],
          "name": "priceStepUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "protocolFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newProtocolFeeRate",
              "type": "uint256"
            }
          ],
          "name": "protocolFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "name": "rangeBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "subsidyFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newSubsidyFeeRate",
              "type": "uint256"
            }
          ],
          "name": "subsidyFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "takeOrderWhenMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "accounts",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "name": "userOrders",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"baseDecimal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"cancelLimitOrder\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"createBuyLimitOrder\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"createSellLimitOrder\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutOffer\",\"type\":\"uint256\"}],\"name\":\"getAmountInForMovePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveQuote\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInOffer\",\"type\":\"uint256\"}],\"name\":\"getAmountOutForMovePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextReserveQuote\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserveBase\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserveQuote\",\"type\":\"uint112\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserOrders\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"orderIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"priceStep\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"direction\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxSize\",\"type\":\"uint32\"}],\"name\":\"marketBook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"marketOrder\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"order\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMinAmount\",\"type\":\"uint256\"}],\"name\":\"minAmountUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceDecimal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceStep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPriceStep\",\"type\":\"uint256\"}],\"name\":\"priceStepUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"protocolFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolFeeRate\",\"type\":\"uint256\"}],\"name\":\"protocolFeeRateUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"quoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"direction\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"rangeBook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"subsidyFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSubsidyFeeRate\",\"type\":\"uint256\"}],\"name\":\"subsidyFeeRateUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"takeOrderWhenMovePrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"userOrders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IOrderBook.sol\":\"IOrderBook\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IOrderBook.sol\":{\"keccak256\":\"0x88c44365451e69c40779ed92c98b683b8d8e2b1689ffe4c2d388faf476fe1314\",\"urls\":[\"bzz-raw://5d1f23ba83fb1960400c70362b5f0bcae2fb26d8c8d581a9b8164d8d91fdb325\",\"dweb:/ipfs/QmTY1cYugvuWb5VinnxQZkLgRTZ9yXFs6ivk2obwvzrNGJ\"]}},\"version\":1}",
      "interface": [
        {
          "constant": true,
          "inputs": [],
          "name": "baseDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "baseToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "cancelLimitOrder",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createBuyLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "createSellLimitOrder",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOutOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountInForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountInOffer",
              "type": "uint256"
            }
          ],
          "name": "getAmountOutForMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nextReserveQuote",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserveBase",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserveQuote",
              "type": "uint112"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "name": "getUserOrders",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "orderIds",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "maxSize",
              "type": "uint32"
            }
          ],
          "name": "marketBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "name": "marketOrder",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "order",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "minAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newMinAmount",
              "type": "uint256"
            }
          ],
          "name": "minAmountUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pair",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceDecimal",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "priceStep",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newPriceStep",
              "type": "uint256"
            }
          ],
          "name": "priceStepUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "protocolFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newProtocolFeeRate",
              "type": "uint256"
            }
          ],
          "name": "protocolFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "quoteToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "direction",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            }
          ],
          "name": "rangeBook",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "prices",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "subsidyFeeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newSubsidyFeeRate",
              "type": "uint256"
            }
          ],
          "name": "subsidyFeeRateUpdate",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "takeOrderWhenMovePrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "accounts",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "name": "userOrders",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "orderId",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        }
      ],
      "bytecode": "",
      "bin": "",
      "bin-runtime": "",
      "srcmap": "",
      "srcmap-runtime": ""
    },
    "contracts/interfaces/IOrderBookFactory.sol:IOrderBookFactory": {
      "abi": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderBookCreated",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "WETH",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "allOrderBooks",
          "outputs": [
            {
              "internalType": "address",
              "name": "orderBook",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            }
          ],
          "name": "createOrderBook",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getCodeHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "name": "getOrderBook",
          "outputs": [
            {
              "internalType": "address",
              "name": "orderBook",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pairFactory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"OrderBookCreated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allOrderBooks\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"orderBook\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"priceStep\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"}],\"name\":\"createOrderBook\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getOrderBook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"orderBook\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pairFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IOrderBookFactory.sol\":\"IOrderBookFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IOrderBookFactory.sol\":{\"keccak256\":\"0x35de3f95ee0847aaf2a398e43acaa993f3f38ec89a02546993a338418c14276f\",\"urls\":[\"bzz-raw://6b87e84de0469baa8c646769d164ae4241311ddb36d61f495e0ef3233d9e41f4\",\"dweb:/ipfs/QmYMBYbH6zPLzfnf43wiyBftSuzpPAwAz1cVQBm7qpsMmU\"]}},\"version\":1}",
      "interface": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "OrderBookCreated",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "WETH",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "allOrderBooks",
          "outputs": [
            {
              "internalType": "address",
              "name": "orderBook",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "priceStep",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            }
          ],
          "name": "createOrderBook",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getCodeHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "name": "getOrderBook",
          "outputs": [
            {
              "internalType": "address",
              "name": "orderBook",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "pairFactory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        }
      ],
      "bytecode": "",
      "bin": "",
      "bin-runtime": "",
      "srcmap": "",
      "srcmap-runtime": ""
    },
    "contracts/interfaces/IUniswapV2Factory.sol:IUniswapV2Factory": {
      "abi": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "pair",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "PairCreated",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "admin",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "allPairs",
          "outputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "allPairsLength",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "name": "createPair",
          "outputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "feeTo",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getCodeHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getOrderBookFactory",
          "outputs": [
            {
              "internalType": "address",
              "name": "factory",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "name": "getPair",
          "outputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "setAdmin",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "setFeeTo",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "_orderBookFactory",
              "type": "address"
            }
          ],
          "name": "setOrderBookFactory",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"PairCreated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allPairs\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"allPairsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"createPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOrderBookFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"setFeeTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_orderBookFactory\",\"type\":\"address\"}],\"name\":\"setOrderBookFactory\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IUniswapV2Factory.sol\":\"IUniswapV2Factory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IUniswapV2Factory.sol\":{\"keccak256\":\"0x7b2a8203923ba2af5ec2ea54f655ac40fc32c9bc5b00ed01058326fc212763c4\",\"urls\":[\"bzz-raw://72d5966709eec21964685c47b8ee017e22ae9f616b516e77f0754259d01690ec\",\"dweb:/ipfs/QmS4gyruWoRR3Ab2enF9omwpmFXcZXSB3c9azNRM7cYNop\"]}},\"version\":1}",
      "interface": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "pair",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "PairCreated",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "admin",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "allPairs",
          "outputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "allPairsLength",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "name": "createPair",
          "outputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "feeTo",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getCodeHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getOrderBookFactory",
          "outputs": [
            {
              "internalType": "address",
              "name": "factory",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "name": "getPair",
          "outputs": [
            {
              "internalType": "address",
              "name": "pair",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "setAdmin",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "setFeeTo",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "_orderBookFactory",
              "type": "address"
            }
          ],
          "name": "setOrderBookFactory",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "bytecode": "",
      "bin": "",
      "bin-runtime": "",
      "srcmap": "",
      "srcmap-runtime": ""
    },
    "contracts/interfaces/IUniswapV2Pair.sol:IUniswapV2Pair": {
      "abi": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "Burn",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            }
          ],
          "name": "Mint",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0In",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1In",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0Out",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1Out",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "Swap",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint112",
              "name": "reserve0",
              "type": "uint112"
            },
            {
              "indexed": false,
              "internalType": "uint112",
              "name": "reserve1",
              "type": "uint112"
            }
          ],
          "name": "Sync",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "DOMAIN_SEPARATOR",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "MINIMUM_LIQUIDITY",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "PERMIT_TYPEHASH",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "burn",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "factory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserve0",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserve1",
              "type": "uint112"
            },
            {
              "internalType": "uint32",
              "name": "blockTimestampLast",
              "type": "uint32"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "kLast",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "mint",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "liquidity",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "name": "nonces",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "v",
              "type": "uint8"
            },
            {
              "internalType": "bytes32",
              "name": "r",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "s",
              "type": "bytes32"
            }
          ],
          "name": "permit",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "price0CumulativeLast",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "price1CumulativeLast",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "skim",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount0Out",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Out",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "name": "swap",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount0Out",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Out",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "name": "swapOriginal",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [],
          "name": "sync",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "token0",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "token1",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"}],\"name\":\"Sync\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MINIMUM_LIQUIDITY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"blockTimestampLast\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"kLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price0CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price1CumulativeLast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"skim\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swapOriginal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"sync\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IUniswapV2Pair.sol\":\"IUniswapV2Pair\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x581f0f810f88942f26211b503fdabb786826abb59741624cf985c09ee6a76e03\",\"urls\":[\"bzz-raw://d7b6d788a4524585bdfb8b6a7213d46284a81f896e011143b2acacbbd5c7a1e0\",\"dweb:/ipfs/QmayLfvKFDQQAEbK2zyfoe3KDz9EdH8nnwVYqTDbvCtncA\"]}},\"version\":1}",
      "interface": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "Burn",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            }
          ],
          "name": "Mint",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0In",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1In",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount0Out",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount1Out",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "Swap",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint112",
              "name": "reserve0",
              "type": "uint112"
            },
            {
              "indexed": false,
              "internalType": "uint112",
              "name": "reserve1",
              "type": "uint112"
            }
          ],
          "name": "Sync",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "DOMAIN_SEPARATOR",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "MINIMUM_LIQUIDITY",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "PERMIT_TYPEHASH",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "burn",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "factory",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getReserves",
          "outputs": [
            {
              "internalType": "uint112",
              "name": "reserve0",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "reserve1",
              "type": "uint112"
            },
            {
              "internalType": "uint32",
              "name": "blockTimestampLast",
              "type": "uint32"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "initialize",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "kLast",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "mint",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "liquidity",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "name": "nonces",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "v",
              "type": "uint8"
            },
            {
              "internalType": "bytes32",
              "name": "r",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "s",
              "type": "bytes32"
            }
          ],
          "name": "permit",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "price0CumulativeLast",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "price1CumulativeLast",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "name": "skim",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount0Out",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Out",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "name": "swap",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount0Out",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Out",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "name": "swapOriginal",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "pure",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [],
          "name": "sync",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "token0",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "token1",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "bytecode": "",
      "bin": "",
      "bin-runtime": "",
      "srcmap": "",
      "srcmap-runtime": ""
    },
    "contracts/interfaces/IWETH.sol:IWETH": {
      "abi": [
        {
          "constant": false,
          "inputs": [],
          "name": "deposit",
          "outputs": [],
          "payable": true,
          "stateMutability": "payable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "withdraw",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "",
          "opcodes": "",
          "sourceMap": ""
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0x25ed8b4dd0b9382d61501d7fe6f30ea65e6800907ba4a5a0f280e79c80bdfd86\",\"urls\":[\"bzz-raw://72c047f1ad25724c269cfb87f9291558a2723d90ef8b25224caf84e04123a52f\",\"dweb:/ipfs/QmXjW9nmRTasWKYGMnQRBGRHJg2AbT6Z4azWowuST1bLu3\"]}},\"version\":1}",
      "interface": [
        {
          "constant": false,
          "inputs": [],
          "name": "deposit",
          "outputs": [],
          "payable": true,
          "stateMutability": "payable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "name": "withdraw",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "bytecode": "",
      "bin": "",
      "bin-runtime": "",
      "srcmap": "",
      "srcmap-runtime": ""
    },
    "contracts/libraries/Arrays.sol:Arrays": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582027f0c054bc983ac7fbdecdfdcc301ff7f802556785fd60f312281b553763cf9464736f6c63430005100032",
          "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0x27 CREATE 0xC0 SLOAD 0xBC SWAP9 GASPRICE 0xC7 0xFB 0xDE 0xCD REVERT 0xCC ADDRESS 0x1F 0xF7 0xF8 MUL SSTORE PUSH8 0x85FD60F312281B55 CALLDATACOPY PUSH4 0xCF946473 PUSH16 0x6C634300051000320000000000000000 ",
          "sourceMap": "84:1081:11:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582027f0c054bc983ac7fbdecdfdcc301ff7f802556785fd60f312281b553763cf9464736f6c63430005100032",
          "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0x27 CREATE 0xC0 SLOAD 0xBC SWAP9 GASPRICE 0xC7 0xFB 0xDE 0xCD REVERT 0xCC ADDRESS 0x1F 0xF7 0xF8 MUL SSTORE PUSH8 0x85FD60F312281B55 CALLDATACOPY PUSH4 0xCF946473 PUSH16 0x6C634300051000320000000000000000 ",
          "sourceMap": "84:1081:11:-;;;;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Arrays.sol\":\"Arrays\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/libraries/Arrays.sol\":{\"keccak256\":\"0x31f2775eea5fe5e81a014fbf8b244f4cd2e24f6fb8ebe837095ba63ed594765b\",\"urls\":[\"bzz-raw://30330f7e9ca3f4b04273713517d9392b6f6f65bdef011893fa1b1ca455a6d286\",\"dweb:/ipfs/Qmd5F2W2pc7wVFcNTsULT6cQcqwijy3SLcMYU3mG9q5GbD\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582027f0c054bc983ac7fbdecdfdcc301ff7f802556785fd60f312281b553763cf9464736f6c63430005100032",
      "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582027f0c054bc983ac7fbdecdfdcc301ff7f802556785fd60f312281b553763cf9464736f6c63430005100032",
      "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582027f0c054bc983ac7fbdecdfdcc301ff7f802556785fd60f312281b553763cf9464736f6c63430005100032",
      "srcmap": "84:1081:11:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
      "srcmap-runtime": "84:1081:11:-;;;;;;;;"
    },
    "contracts/libraries/Math.sol:Math": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820c37981868042b756b1af965185f99afee69f7bbd28d125016ae0510033a62d3a64736f6c63430005100032",
          "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC3 PUSH26 0x81868042B756B1AF965185F99AFEE69F7BBD28D125016AE05100 CALLER 0xA6 0x2D GASPRICE PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "83:540:12:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820c37981868042b756b1af965185f99afee69f7bbd28d125016ae0510033a62d3a64736f6c63430005100032",
          "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC3 PUSH26 0x81868042B756B1AF965185F99AFEE69F7BBD28D125016AE05100 CALLER 0xA6 0x2D GASPRICE PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "83:540:12:-;;;;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Math.sol\":\"Math\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/libraries/Math.sol\":{\"keccak256\":\"0xccbb532d91028652fd3b3df3ae1b02ba0ab62af320270c702587816501e6d219\",\"urls\":[\"bzz-raw://49e097b670fa636d85b6da78f645462d33b1d9f334a290e70ff76a1705e08877\",\"dweb:/ipfs/QmTywL9AbXJMHoYsiyyUdftnc4hig4y2srNJifgCHth3LH\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820c37981868042b756b1af965185f99afee69f7bbd28d125016ae0510033a62d3a64736f6c63430005100032",
      "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820c37981868042b756b1af965185f99afee69f7bbd28d125016ae0510033a62d3a64736f6c63430005100032",
      "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820c37981868042b756b1af965185f99afee69f7bbd28d125016ae0510033a62d3a64736f6c63430005100032",
      "srcmap": "83:540:12:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
      "srcmap-runtime": "83:540:12:-;;;;;;;;"
    },
    "contracts/libraries/OrderBookLibrary.sol:OrderBookLibrary": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820ba93c132ab9cad26ad274e7e7e754f3876d687d1e45353edd49105b230aa069a64736f6c63430005100032",
          "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBA SWAP4 0xC1 ORIGIN 0xAB SWAP13 0xAD 0x26 0xAD 0x27 0x4E PUSH31 0x7E754F3876D687D1E45353EDD49105B230AA069A64736F6C63430005100032 ",
          "sourceMap": "256:15567:13:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820ba93c132ab9cad26ad274e7e7e754f3876d687d1e45353edd49105b230aa069a64736f6c63430005100032",
          "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBA SWAP4 0xC1 ORIGIN 0xAB SWAP13 0xAD 0x26 0xAD 0x27 0x4E PUSH31 0x7E754F3876D687D1E45353EDD49105B230AA069A64736F6C63430005100032 ",
          "sourceMap": "256:15567:13:-;;;;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/OrderBookLibrary.sol\":\"OrderBookLibrary\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IOrderBook.sol\":{\"keccak256\":\"0x88c44365451e69c40779ed92c98b683b8d8e2b1689ffe4c2d388faf476fe1314\",\"urls\":[\"bzz-raw://5d1f23ba83fb1960400c70362b5f0bcae2fb26d8c8d581a9b8164d8d91fdb325\",\"dweb:/ipfs/QmTY1cYugvuWb5VinnxQZkLgRTZ9yXFs6ivk2obwvzrNGJ\"]},\"contracts/interfaces/IOrderBookFactory.sol\":{\"keccak256\":\"0x35de3f95ee0847aaf2a398e43acaa993f3f38ec89a02546993a338418c14276f\",\"urls\":[\"bzz-raw://6b87e84de0469baa8c646769d164ae4241311ddb36d61f495e0ef3233d9e41f4\",\"dweb:/ipfs/QmYMBYbH6zPLzfnf43wiyBftSuzpPAwAz1cVQBm7qpsMmU\"]},\"contracts/interfaces/IUniswapV2Factory.sol\":{\"keccak256\":\"0x7b2a8203923ba2af5ec2ea54f655ac40fc32c9bc5b00ed01058326fc212763c4\",\"urls\":[\"bzz-raw://72d5966709eec21964685c47b8ee017e22ae9f616b516e77f0754259d01690ec\",\"dweb:/ipfs/QmS4gyruWoRR3Ab2enF9omwpmFXcZXSB3c9azNRM7cYNop\"]},\"contracts/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x581f0f810f88942f26211b503fdabb786826abb59741624cf985c09ee6a76e03\",\"urls\":[\"bzz-raw://d7b6d788a4524585bdfb8b6a7213d46284a81f896e011143b2acacbbd5c7a1e0\",\"dweb:/ipfs/QmayLfvKFDQQAEbK2zyfoe3KDz9EdH8nnwVYqTDbvCtncA\"]},\"contracts/libraries/Math.sol\":{\"keccak256\":\"0xccbb532d91028652fd3b3df3ae1b02ba0ab62af320270c702587816501e6d219\",\"urls\":[\"bzz-raw://49e097b670fa636d85b6da78f645462d33b1d9f334a290e70ff76a1705e08877\",\"dweb:/ipfs/QmTywL9AbXJMHoYsiyyUdftnc4hig4y2srNJifgCHth3LH\"]},\"contracts/libraries/OrderBookLibrary.sol\":{\"keccak256\":\"0x4b636198fcc43ea259db9c255f2c479e67cda5b79144d425f3f12bd337bd7bc3\",\"urls\":[\"bzz-raw://cfda742ee6730d24dfbe5b76cab91ce06ffdf0f451e8a8cc7b29bb87fbbda277\",\"dweb:/ipfs/QmVqyAAsVmPGq7AqCuxeWKRFDVfgGKhw7t5MPvTL1onJwi\"]},\"contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x2ec47d2360eaf97d08df4e022201f5ab70e1e1feeb2b7da46b43fab649898a39\",\"urls\":[\"bzz-raw://56be45e5cc62e8e48567ada0407699c2826665359eed633da14d00f67efd95bc\",\"dweb:/ipfs/QmXrXoZ9Ho8SdWjXC2BEzDiDVURPTTzBXiqfcPnQsg1GSB\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820ba93c132ab9cad26ad274e7e7e754f3876d687d1e45353edd49105b230aa069a64736f6c63430005100032",
      "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820ba93c132ab9cad26ad274e7e7e754f3876d687d1e45353edd49105b230aa069a64736f6c63430005100032",
      "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820ba93c132ab9cad26ad274e7e7e754f3876d687d1e45353edd49105b230aa069a64736f6c63430005100032",
      "srcmap": "256:15567:13:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
      "srcmap-runtime": "256:15567:13:-;;;;;;;;"
    },
    "contracts/libraries/SafeMath.sol:SafeMath": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820a19bc68179d56101a969b9053ffa5d29507ad5b277164d08de9cc818274b5b3064736f6c63430005100032",
          "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG1 SWAP12 0xC6 DUP2 PUSH26 0xD56101A969B9053FFA5D29507AD5B277164D08DE9CC818274B5B ADDRESS PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "136:548:14:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820a19bc68179d56101a969b9053ffa5d29507ad5b277164d08de9cc818274b5b3064736f6c63430005100032",
          "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG1 SWAP12 0xC6 DUP2 PUSH26 0xD56101A969B9053FFA5D29507AD5B277164D08DE9CC818274B5B ADDRESS PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "136:548:14:-;;;;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x2ec47d2360eaf97d08df4e022201f5ab70e1e1feeb2b7da46b43fab649898a39\",\"urls\":[\"bzz-raw://56be45e5cc62e8e48567ada0407699c2826665359eed633da14d00f67efd95bc\",\"dweb:/ipfs/QmXrXoZ9Ho8SdWjXC2BEzDiDVURPTTzBXiqfcPnQsg1GSB\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820a19bc68179d56101a969b9053ffa5d29507ad5b277164d08de9cc818274b5b3064736f6c63430005100032",
      "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820a19bc68179d56101a969b9053ffa5d29507ad5b277164d08de9cc818274b5b3064736f6c63430005100032",
      "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820a19bc68179d56101a969b9053ffa5d29507ad5b277164d08de9cc818274b5b3064736f6c63430005100032",
      "srcmap": "136:548:14:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
      "srcmap-runtime": "136:548:14:-;;;;;;;;"
    },
    "contracts/libraries/TransferHelper.sol:TransferHelper": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582062688452ad007e62ff64ef770343dbb6b936474ed1df68b439077b733daca6c164736f6c63430005100032",
          "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH3 0x688452 0xAD STOP PUSH31 0x62FF64EF770343DBB6B936474ED1DF68B439077B733DACA6C164736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "140:1373:15:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582062688452ad007e62ff64ef770343dbb6b936474ed1df68b439077b733daca6c164736f6c63430005100032",
          "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH3 0x688452 0xAD STOP PUSH31 0x62FF64EF770343DBB6B936474ED1DF68B439077B733DACA6C164736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "140:1373:15:-;;;;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/TransferHelper.sol\":\"TransferHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/libraries/TransferHelper.sol\":{\"keccak256\":\"0x43ca45ce883d480bab2394b7cc50633c713a5bf77496fe55e0dd1373b4cbddf8\",\"urls\":[\"bzz-raw://a86702c285ff5a32f3195bab61af9a0e78f44423d737a9f904cd3077e018f344\",\"dweb:/ipfs/QmZTWpAZXzDaNjdLTMHduK97KNvv2uCWXoeb7nXitv3PLZ\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582062688452ad007e62ff64ef770343dbb6b936474ed1df68b439077b733daca6c164736f6c63430005100032",
      "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582062688452ad007e62ff64ef770343dbb6b936474ed1df68b439077b733daca6c164736f6c63430005100032",
      "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582062688452ad007e62ff64ef770343dbb6b936474ed1df68b439077b733daca6c164736f6c63430005100032",
      "srcmap": "140:1373:15:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
      "srcmap-runtime": "140:1373:15:-;;;;;;;;"
    },
    "contracts/libraries/UQ112x112.sol:UQ112x112": {
      "abi": [],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820bcff5b117d51ba74135e50023f92da4eeefa200ae2a0bd46c4a0abc9d60ceeab64736f6c63430005100032",
          "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SELFDESTRUCT JUMPDEST GT PUSH30 0x51BA74135E50023F92DA4EEEFA200AE2A0BD46C4A0ABC9D60CEEAB64736F PUSH13 0x63430005100032000000000000 ",
          "sourceMap": "190:585:16:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820bcff5b117d51ba74135e50023f92da4eeefa200ae2a0bd46c4a0abc9d60ceeab64736f6c63430005100032",
          "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SELFDESTRUCT JUMPDEST GT PUSH30 0x51BA74135E50023F92DA4EEEFA200AE2A0BD46C4A0ABC9D60CEEAB64736F PUSH13 0x63430005100032000000000000 ",
          "sourceMap": "190:585:16:-;;;;;;;;"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/UQ112x112.sol\":\"UQ112x112\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/libraries/UQ112x112.sol\":{\"keccak256\":\"0x394bda0ad101756150be3737eb405eec14da4bd756e8a65f5a110f73565f5dcd\",\"urls\":[\"bzz-raw://c0b40cd3cf66546fb5854ee374aa2a40e6103a2b2616cee3c27ce80dcb76d5bf\",\"dweb:/ipfs/QmfURbSAc6ZTekkrfGdkCqv6bU27dfnbVKgSDqHHavGCae\"]}},\"version\":1}",
      "interface": [],
      "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820bcff5b117d51ba74135e50023f92da4eeefa200ae2a0bd46c4a0abc9d60ceeab64736f6c63430005100032",
      "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820bcff5b117d51ba74135e50023f92da4eeefa200ae2a0bd46c4a0abc9d60ceeab64736f6c63430005100032",
      "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820bcff5b117d51ba74135e50023f92da4eeefa200ae2a0bd46c4a0abc9d60ceeab64736f6c63430005100032",
      "srcmap": "190:585:16:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
      "srcmap-runtime": "190:585:16:-;;;;;;;;"
    },
    "contracts/test/WETH9.sol:WETH9": {
      "abi": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "guy",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Deposit",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Withdrawal",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "guy",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [],
          "name": "deposit",
          "outputs": [],
          "payable": true,
          "stateMutability": "payable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "withdraw",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "evm": {
        "bytecode": {
          "linkReferences": {},
          "object": "60c0604052600c60808190526b5772617070656420524f534560a01b60a090815261002d916000919061007a565b506040805180820190915260058082526457524f534560d81b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61073e806101246000396000f3fe60806040526004361061008c5760003560e01c806306fdde0314610091578063095ea7b31461011b57806318160ddd1461016857806323b872dd1461018f5780632e1a7d4d146101d2578063313ce567146101fe57806370a082311461022957806395d89b411461025c578063a9059cbb14610271578063d0e30db0146102aa578063dd62ed3e146102b2575b600080fd5b34801561009d57600080fd5b506100a66102ed565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e05781810151838201526020016100c8565b50505050905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561012757600080fd5b506101546004803603604081101561013e57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b34801561017457600080fd5b5061017d6103e1565b60408051918252519081900360200190f35b34801561019b57600080fd5b50610154600480360360608110156101b257600080fd5b506001600160a01b038135811691602081013590911690604001356103e5565b3480156101de57600080fd5b506101fc600480360360208110156101f557600080fd5b503561055d565b005b34801561020a57600080fd5b50610213610614565b6040805160ff9092168252519081900360200190f35b34801561023557600080fd5b5061017d6004803603602081101561024c57600080fd5b50356001600160a01b031661061d565b34801561026857600080fd5b506100a661062f565b34801561027d57600080fd5b506101546004803603604081101561029457600080fd5b506001600160a01b038135169060200135610689565b6101fc61069d565b3480156102be57600080fd5b5061017d600480360360408110156102d557600080fd5b506001600160a01b03813581169160200135166106ec565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b820191906000526020600020905b81548152906001019060200180831161035657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561042c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061046a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104ec576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104c1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561059b576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105da573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b60006106963384846103e5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582029ed1d8a34a57823725329cedff42533ecfe53e57ab7b7ae1ea26c775d375dcf64736f6c63430005100032",
          "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xC PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH12 0x5772617070656420524F5345 PUSH1 0xA0 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2D SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x5 DUP1 DUP3 MSTORE PUSH5 0x57524F5345 PUSH1 0xD8 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x115 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xBB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xE8 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xE8 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xE8 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xCD JUMP JUMPDEST POP PUSH2 0xF4 SWAP3 SWAP2 POP PUSH2 0xF8 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x112 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x73E DUP1 PUSH2 0x124 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x168 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18F JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2B2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA6 PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x10D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x13E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x37B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x55D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x614 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x61D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA6 PUSH2 0x62F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x689 JUMP JUMPDEST PUSH2 0x1FC PUSH2 0x69D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x373 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x348 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x373 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x356 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x46A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x59B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x373 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x348 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x373 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x696 CALLER DUP5 DUP5 PUSH2 0x3E5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0x29 0xED SAR DUP11 CALLVALUE 0xA5 PUSH25 0x23725329CEDFF42533ECFE53E57AB7B7AE1EA26C775D375DCF PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "751:39:17:-;729:1887;751:39;;729:1887;751:39;;;-1:-1:-1;;;751:39:17;;;;;;-1:-1:-1;;751:39:17;;:::i;:::-;-1:-1:-1;797:32:17;;;;;;;;;;;;;-1:-1:-1;;;797:32:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;836:27:17;;;-1:-1:-1;;836:27:17;861:2;836:27;;;729:1887;5:2:-1;;;;30:1;27;20:12;5:2;729:1887:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;729:1887:17;;;-1:-1:-1;729:1887:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
        },
        "deployedBytecode": {
          "linkReferences": {},
          "object": "60806040526004361061008c5760003560e01c806306fdde0314610091578063095ea7b31461011b57806318160ddd1461016857806323b872dd1461018f5780632e1a7d4d146101d2578063313ce567146101fe57806370a082311461022957806395d89b411461025c578063a9059cbb14610271578063d0e30db0146102aa578063dd62ed3e146102b2575b600080fd5b34801561009d57600080fd5b506100a66102ed565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e05781810151838201526020016100c8565b50505050905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561012757600080fd5b506101546004803603604081101561013e57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b34801561017457600080fd5b5061017d6103e1565b60408051918252519081900360200190f35b34801561019b57600080fd5b50610154600480360360608110156101b257600080fd5b506001600160a01b038135811691602081013590911690604001356103e5565b3480156101de57600080fd5b506101fc600480360360208110156101f557600080fd5b503561055d565b005b34801561020a57600080fd5b50610213610614565b6040805160ff9092168252519081900360200190f35b34801561023557600080fd5b5061017d6004803603602081101561024c57600080fd5b50356001600160a01b031661061d565b34801561026857600080fd5b506100a661062f565b34801561027d57600080fd5b506101546004803603604081101561029457600080fd5b506001600160a01b038135169060200135610689565b6101fc61069d565b3480156102be57600080fd5b5061017d600480360360408110156102d557600080fd5b506001600160a01b03813581169160200135166106ec565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b820191906000526020600020905b81548152906001019060200180831161035657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561042c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061046a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104ec576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104c1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561059b576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105da573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b60006106963384846103e5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582029ed1d8a34a57823725329cedff42533ecfe53e57ab7b7ae1ea26c775d375dcf64736f6c63430005100032",
          "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x168 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18F JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2B2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA6 PUSH2 0x2ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x10D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x13E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x37B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x55D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x614 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x61D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA6 PUSH2 0x62F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x689 JUMP JUMPDEST PUSH2 0x1FC PUSH2 0x69D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x373 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x348 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x373 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x356 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x46A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x59B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x373 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x348 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x373 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x696 CALLER DUP5 DUP5 PUSH2 0x3E5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0x29 0xED SAR DUP11 CALLVALUE 0xA5 PUSH25 0x23725329CEDFF42533ECFE53E57AB7B7AE1EA26C775D375DCF PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ",
          "sourceMap": "729:1887:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;751:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;751:39:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;751:39:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1808:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1808:181:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1808:181:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1703:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1703:97:17;;;:::i;:::-;;;;;;;;;;;;;;;;2128:485;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2128:485:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2128:485:17;;;;;;;;;;;;;;;;;:::i;1483:212::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1483:212:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1483:212:17;;:::i;:::-;;836:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:27:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1129:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1129:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1129:65:17;-1:-1:-1;;;;;1129:65:17;;:::i;797:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;797:32:17;;;:::i;1997:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1997:123:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1997:123:17;;;;;;;;:::i;1344:133::-;;;:::i;1201:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1201:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1201:65:17;;;;;;;;;;:::i;751:39::-;;;;;;;;;;;;;;;-1:-1:-1;;751:39:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1808:181::-;1891:10;1864:4;1881:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;1881:26:17;;;;;;;;;;;:32;;;1929:30;;;;;;;1864:4;;1881:26;;1891:10;;1929:30;;;;;;;;-1:-1:-1;1977:4:17;1808:181;;;;:::o;1703:97::-;1771:21;1703:97;:::o;2128:485::-;-1:-1:-1;;;;;2250:14:17;;2220:4;2250:14;;;:9;:14;;;;;;:21;-1:-1:-1;2250:21:17;2242:34;;;;;-1:-1:-1;;;2242:34:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2293:17:17;;2300:10;2293:17;;;;:59;;-1:-1:-1;;;;;;2314:14:17;;;;;;:9;:14;;;;;;;;2329:10;2314:26;;;;;;;;-1:-1:-1;;2314:38:17;;2293:59;2289:186;;;-1:-1:-1;;;;;2377:14:17;;;;;;:9;:14;;;;;;;;2392:10;2377:26;;;;;;;;:33;-1:-1:-1;2377:33:17;2369:46;;;;;-1:-1:-1;;;2369:46:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2430:14:17;;;;;;:9;:14;;;;;;;;2445:10;2430:26;;;;;;;:33;;;;;;;2289:186;-1:-1:-1;;;;;2487:14:17;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2519:14;;;;;;;;;;:21;;;;;;2558:23;;;;;;;2519:14;;2558:23;;;;;;;;;;;-1:-1:-1;2601:4:17;2128:485;;;;;:::o;1483:212::-;1547:10;1537:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1537:28:17;1529:41;;;;;-1:-1:-1;;;1529:41:17;;;;;;;;;;;;;;;;;;;;;;;1591:10;1581:21;;;;:9;:21;;;;;;:28;;;;;;;1620:24;;;;;;1606:3;;1620:24;;1581:21;1620:24;1606:3;1591:10;1620:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1660:27:17;;;;;;;;1671:10;;1660:27;;;;;;;;;;1483:212;:::o;836:27::-;;;;;;:::o;1129:65::-;;;;;;;;;;;;;:::o;797:32::-;;;;;;;;;;;;;;;-1:-1:-1;;797:32:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1997:123;2054:4;2078:34;2091:10;2103:3;2108;2078:12;:34::i;:::-;2071:41;1997:123;-1:-1:-1;;;1997:123:17:o;1344:133::-;1399:10;1389:21;;;;:9;:21;;;;;;;;;:34;;1414:9;1389:34;;;;;;1439:30;;;;;;;;;;;;;;;;;1344:133::o;1201:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o"
        }
      },
      "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/test/WETH9.sol\":\"WETH9\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"contracts/test/WETH9.sol\":{\"keccak256\":\"0x720c29ce91df4b339ad1e9386316fb2eb76730baa71d49480ef4c3f2554d2084\",\"urls\":[\"bzz-raw://eb659c50aef8f3b8b4f6608957c47c68d0663765902272aa8050d44bedaf63d3\",\"dweb:/ipfs/QmWKv7EyvRHKLSVKCGTikJDR8LDMFwbytAKdZZuBqijabh\"]}},\"version\":1}",
      "interface": [
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "guy",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Approval",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Deposit",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Transfer",
          "type": "event"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "Withdrawal",
          "type": "event"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "guy",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ],
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [],
          "name": "deposit",
          "outputs": [],
          "payable": true,
          "stateMutability": "payable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "address",
              "name": "src",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "dst",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "internalType": "uint256",
              "name": "wad",
              "type": "uint256"
            }
          ],
          "name": "withdraw",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        }
      ],
      "bytecode": "60c0604052600c60808190526b5772617070656420524f534560a01b60a090815261002d916000919061007a565b506040805180820190915260058082526457524f534560d81b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61073e806101246000396000f3fe60806040526004361061008c5760003560e01c806306fdde0314610091578063095ea7b31461011b57806318160ddd1461016857806323b872dd1461018f5780632e1a7d4d146101d2578063313ce567146101fe57806370a082311461022957806395d89b411461025c578063a9059cbb14610271578063d0e30db0146102aa578063dd62ed3e146102b2575b600080fd5b34801561009d57600080fd5b506100a66102ed565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e05781810151838201526020016100c8565b50505050905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561012757600080fd5b506101546004803603604081101561013e57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b34801561017457600080fd5b5061017d6103e1565b60408051918252519081900360200190f35b34801561019b57600080fd5b50610154600480360360608110156101b257600080fd5b506001600160a01b038135811691602081013590911690604001356103e5565b3480156101de57600080fd5b506101fc600480360360208110156101f557600080fd5b503561055d565b005b34801561020a57600080fd5b50610213610614565b6040805160ff9092168252519081900360200190f35b34801561023557600080fd5b5061017d6004803603602081101561024c57600080fd5b50356001600160a01b031661061d565b34801561026857600080fd5b506100a661062f565b34801561027d57600080fd5b506101546004803603604081101561029457600080fd5b506001600160a01b038135169060200135610689565b6101fc61069d565b3480156102be57600080fd5b5061017d600480360360408110156102d557600080fd5b506001600160a01b03813581169160200135166106ec565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b820191906000526020600020905b81548152906001019060200180831161035657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561042c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061046a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104ec576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104c1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561059b576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105da573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b60006106963384846103e5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582029ed1d8a34a57823725329cedff42533ecfe53e57ab7b7ae1ea26c775d375dcf64736f6c63430005100032",
      "bin": "60c0604052600c60808190526b5772617070656420524f534560a01b60a090815261002d916000919061007a565b506040805180820190915260058082526457524f534560d81b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61073e806101246000396000f3fe60806040526004361061008c5760003560e01c806306fdde0314610091578063095ea7b31461011b57806318160ddd1461016857806323b872dd1461018f5780632e1a7d4d146101d2578063313ce567146101fe57806370a082311461022957806395d89b411461025c578063a9059cbb14610271578063d0e30db0146102aa578063dd62ed3e146102b2575b600080fd5b34801561009d57600080fd5b506100a66102ed565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e05781810151838201526020016100c8565b50505050905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561012757600080fd5b506101546004803603604081101561013e57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b34801561017457600080fd5b5061017d6103e1565b60408051918252519081900360200190f35b34801561019b57600080fd5b50610154600480360360608110156101b257600080fd5b506001600160a01b038135811691602081013590911690604001356103e5565b3480156101de57600080fd5b506101fc600480360360208110156101f557600080fd5b503561055d565b005b34801561020a57600080fd5b50610213610614565b6040805160ff9092168252519081900360200190f35b34801561023557600080fd5b5061017d6004803603602081101561024c57600080fd5b50356001600160a01b031661061d565b34801561026857600080fd5b506100a661062f565b34801561027d57600080fd5b506101546004803603604081101561029457600080fd5b506001600160a01b038135169060200135610689565b6101fc61069d565b3480156102be57600080fd5b5061017d600480360360408110156102d557600080fd5b506001600160a01b03813581169160200135166106ec565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b820191906000526020600020905b81548152906001019060200180831161035657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561042c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061046a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104ec576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104c1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561059b576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105da573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b60006106963384846103e5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582029ed1d8a34a57823725329cedff42533ecfe53e57ab7b7ae1ea26c775d375dcf64736f6c63430005100032",
      "bin-runtime": "60806040526004361061008c5760003560e01c806306fdde0314610091578063095ea7b31461011b57806318160ddd1461016857806323b872dd1461018f5780632e1a7d4d146101d2578063313ce567146101fe57806370a082311461022957806395d89b411461025c578063a9059cbb14610271578063d0e30db0146102aa578063dd62ed3e146102b2575b600080fd5b34801561009d57600080fd5b506100a66102ed565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e05781810151838201526020016100c8565b50505050905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561012757600080fd5b506101546004803603604081101561013e57600080fd5b506001600160a01b03813516906020013561037b565b604080519115158252519081900360200190f35b34801561017457600080fd5b5061017d6103e1565b60408051918252519081900360200190f35b34801561019b57600080fd5b50610154600480360360608110156101b257600080fd5b506001600160a01b038135811691602081013590911690604001356103e5565b3480156101de57600080fd5b506101fc600480360360208110156101f557600080fd5b503561055d565b005b34801561020a57600080fd5b50610213610614565b6040805160ff9092168252519081900360200190f35b34801561023557600080fd5b5061017d6004803603602081101561024c57600080fd5b50356001600160a01b031661061d565b34801561026857600080fd5b506100a661062f565b34801561027d57600080fd5b506101546004803603604081101561029457600080fd5b506001600160a01b038135169060200135610689565b6101fc61069d565b3480156102be57600080fd5b5061017d600480360360408110156102d557600080fd5b506001600160a01b03813581169160200135166106ec565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b820191906000526020600020905b81548152906001019060200180831161035657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561042c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061046a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104ec576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104c1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561059b576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105da573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103735780601f1061034857610100808354040283529160200191610373565b60006106963384846103e5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582029ed1d8a34a57823725329cedff42533ecfe53e57ab7b7ae1ea26c775d375dcf64736f6c63430005100032",
      "srcmap": "751:39:17:-;729:1887;751:39;;729:1887;751:39;;;-1:-1:-1;;;751:39:17;;;;;;-1:-1:-1;;751:39:17;;:::i;:::-;-1:-1:-1;797:32:17;;;;;;;;;;;;;-1:-1:-1;;;797:32:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;836:27:17;;;-1:-1:-1;;836:27:17;861:2;836:27;;;729:1887;5:2:-1;;;;30:1;27;20:12;5:2;729:1887:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;729:1887:17;;;-1:-1:-1;729:1887:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
      "srcmap-runtime": "729:1887:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;751:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;751:39:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;751:39:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1808:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1808:181:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1808:181:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1703:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1703:97:17;;;:::i;:::-;;;;;;;;;;;;;;;;2128:485;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2128:485:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2128:485:17;;;;;;;;;;;;;;;;;:::i;1483:212::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1483:212:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1483:212:17;;:::i;:::-;;836:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:27:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1129:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1129:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1129:65:17;-1:-1:-1;;;;;1129:65:17;;:::i;797:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;797:32:17;;;:::i;1997:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1997:123:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1997:123:17;;;;;;;;:::i;1344:133::-;;;:::i;1201:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1201:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1201:65:17;;;;;;;;;;:::i;751:39::-;;;;;;;;;;;;;;;-1:-1:-1;;751:39:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1808:181::-;1891:10;1864:4;1881:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;1881:26:17;;;;;;;;;;;:32;;;1929:30;;;;;;;1864:4;;1881:26;;1891:10;;1929:30;;;;;;;;-1:-1:-1;1977:4:17;1808:181;;;;:::o;1703:97::-;1771:21;1703:97;:::o;2128:485::-;-1:-1:-1;;;;;2250:14:17;;2220:4;2250:14;;;:9;:14;;;;;;:21;-1:-1:-1;2250:21:17;2242:34;;;;;-1:-1:-1;;;2242:34:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2293:17:17;;2300:10;2293:17;;;;:59;;-1:-1:-1;;;;;;2314:14:17;;;;;;:9;:14;;;;;;;;2329:10;2314:26;;;;;;;;-1:-1:-1;;2314:38:17;;2293:59;2289:186;;;-1:-1:-1;;;;;2377:14:17;;;;;;:9;:14;;;;;;;;2392:10;2377:26;;;;;;;;:33;-1:-1:-1;2377:33:17;2369:46;;;;;-1:-1:-1;;;2369:46:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2430:14:17;;;;;;:9;:14;;;;;;;;2445:10;2430:26;;;;;;;:33;;;;;;;2289:186;-1:-1:-1;;;;;2487:14:17;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2519:14;;;;;;;;;;:21;;;;;;2558:23;;;;;;;2519:14;;2558:23;;;;;;;;;;;-1:-1:-1;2601:4:17;2128:485;;;;;:::o;1483:212::-;1547:10;1537:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1537:28:17;1529:41;;;;;-1:-1:-1;;;1529:41:17;;;;;;;;;;;;;;;;;;;;;;;1591:10;1581:21;;;;:9;:21;;;;;;:28;;;;;;;1620:24;;;;;;1606:3;;1620:24;;1581:21;1620:24;1606:3;1591:10;1620:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1660:27:17;;;;;;;;1671:10;;1660:27;;;;;;;;;;1483:212;:::o;836:27::-;;;;;;:::o;1129:65::-;;;;;;;;;;;;;:::o;797:32::-;;;;;;;;;;;;;;;-1:-1:-1;;797:32:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1997:123;2054:4;2078:34;2091:10;2103:3;2108;2078:12;:34::i;:::-;2071:41;1997:123;-1:-1:-1;;;1997:123:17:o;1344:133::-;1399:10;1389:21;;;;:9;:21;;;;;;;;;:34;;1414:9;1389:34;;;;;;1439:30;;;;;;;;;;;;;;;;;1344:133::o;1201:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o"
    }
  },
  "sources": {
    "contracts/OrderBook.sol": {
      "id": 0,
      "AST": {
        "absolutePath": "contracts/OrderBook.sol",
        "exportedSymbols": {
          "OrderBook": [
            1876
          ]
        },
        "id": 1877,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 1,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:0"
          },
          {
            "absolutePath": "contracts/interfaces/IOrderBook.sol",
            "file": "./interfaces/IOrderBook.sol",
            "id": 2,
            "nodeType": "ImportDirective",
            "scope": 1877,
            "sourceUnit": 4680,
            "src": "28:37:0",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/libraries/Arrays.sol",
            "file": "./libraries/Arrays.sol",
            "id": 3,
            "nodeType": "ImportDirective",
            "scope": 1877,
            "sourceUnit": 5292,
            "src": "67:32:0",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/OrderBookBase.sol",
            "file": "./OrderBookBase.sol",
            "id": 4,
            "nodeType": "ImportDirective",
            "scope": 1877,
            "sourceUnit": 3555,
            "src": "101:29:0",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "baseContracts": [
              {
                "arguments": null,
                "baseName": {
                  "contractScope": null,
                  "id": 5,
                  "name": "IOrderBook",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4679,
                  "src": "156:10:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOrderBook_$4679",
                    "typeString": "contract IOrderBook"
                  }
                },
                "id": 6,
                "nodeType": "InheritanceSpecifier",
                "src": "156:10:0"
              },
              {
                "arguments": null,
                "baseName": {
                  "contractScope": null,
                  "id": 7,
                  "name": "OrderBookBase",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 3554,
                  "src": "168:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                    "typeString": "contract OrderBookBase"
                  }
                },
                "id": 8,
                "nodeType": "InheritanceSpecifier",
                "src": "168:13:0"
              }
            ],
            "contractDependencies": [
              3554,
              4105,
              4381,
              4679
            ],
            "contractKind": "contract",
            "documentation": null,
            "fullyImplemented": true,
            "id": 1876,
            "linearizedBaseContracts": [
              1876,
              3554,
              4381,
              4105,
              4679
            ],
            "name": "OrderBook",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "id": 11,
                "libraryName": {
                  "contractScope": null,
                  "id": 9,
                  "name": "SafeMath",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 6818,
                  "src": "195:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SafeMath_$6818",
                    "typeString": "library SafeMath"
                  }
                },
                "nodeType": "UsingForDirective",
                "src": "189:24:0",
                "typeName": {
                  "id": 10,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "208:4:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              },
              {
                "id": 14,
                "libraryName": {
                  "contractScope": null,
                  "id": 12,
                  "name": "SafeMath",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 6818,
                  "src": "225:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SafeMath_$6818",
                    "typeString": "library SafeMath"
                  }
                },
                "nodeType": "UsingForDirective",
                "src": "219:27:0",
                "typeName": {
                  "id": 13,
                  "name": "uint112",
                  "nodeType": "ElementaryTypeName",
                  "src": "238:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  }
                }
              },
              {
                "body": {
                  "id": 17,
                  "nodeType": "Block",
                  "src": "282:8:0",
                  "statements": []
                },
                "documentation": null,
                "id": 18,
                "implemented": true,
                "kind": "fallback",
                "modifiers": [],
                "name": "",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 15,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "262:2:0"
                },
                "returnParameters": {
                  "id": 16,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "282:0:0"
                },
                "scope": 1876,
                "src": "254:36:0",
                "stateMutability": "payable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 245,
                  "nodeType": "Block",
                  "src": "513:1680:0",
                  "statements": [
                    {
                      "assignments": [
                        36
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 36,
                          "name": "amountLeft",
                          "nodeType": "VariableDeclaration",
                          "scope": 245,
                          "src": "524:15:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 35,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "524:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 38,
                      "initialValue": {
                        "argumentTypes": null,
                        "id": 37,
                        "name": "amountOutWithFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24,
                        "src": "542:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "524:34:0"
                    },
                    {
                      "assignments": [
                        40
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 40,
                          "name": "index",
                          "nodeType": "VariableDeclaration",
                          "scope": 245,
                          "src": "569:10:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 39,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "569:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 41,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "569:10:0"
                    },
                    {
                      "assignments": [
                        43
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 43,
                          "name": "length",
                          "nodeType": "VariableDeclaration",
                          "scope": 245,
                          "src": "590:11:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 42,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "590:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 48,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 45,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20,
                            "src": "611:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 46,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26,
                            "src": "622:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 44,
                          "name": "length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3810,
                          "src": "604:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 47,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "604:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "590:38:0"
                    },
                    {
                      "assignments": [
                        52
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 52,
                          "name": "accountsAll",
                          "nodeType": "VariableDeclaration",
                          "scope": 245,
                          "src": "639:28:0",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 50,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "639:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 51,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "639:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                              "typeString": "address[]"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 58,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 56,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43,
                            "src": "684:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 55,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "670:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (address[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 53,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "674:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 54,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "674:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                              "typeString": "address[]"
                            }
                          }
                        },
                        "id": 57,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "670:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory",
                          "typeString": "address[] memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "639:52:0"
                    },
                    {
                      "assignments": [
                        62
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 62,
                          "name": "amountsOut",
                          "nodeType": "VariableDeclaration",
                          "scope": 245,
                          "src": "702:24:0",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 60,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "702:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 61,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "702:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 68,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 66,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43,
                            "src": "740:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 65,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "729:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 63,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "733:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 64,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "733:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 67,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "729:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "702:45:0"
                    },
                    {
                      "body": {
                        "id": 188,
                        "nodeType": "Block",
                        "src": "799:1016:0",
                        "statements": [
                          {
                            "assignments": [
                              77
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 77,
                                "name": "orderId",
                                "nodeType": "VariableDeclaration",
                                "scope": 188,
                                "src": "814:12:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 76,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "814:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 82,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 79,
                                  "name": "direction",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20,
                                  "src": "834:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 80,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 26,
                                  "src": "845:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 78,
                                "name": "peek",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3943,
                                "src": "829:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) view returns (uint256)"
                                }
                              },
                              "id": 81,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "829:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "814:37:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 85,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 83,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "870:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 84,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "881:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "870:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 87,
                            "nodeType": "IfStatement",
                            "src": "866:23:0",
                            "trueBody": {
                              "id": 86,
                              "nodeType": "Break",
                              "src": "884:5:0"
                            }
                          },
                          {
                            "assignments": [
                              89
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 89,
                                "name": "order",
                                "nodeType": "VariableDeclaration",
                                "scope": 188,
                                "src": "904:18:0",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 88,
                                  "name": "Order",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 1915,
                                  "src": "904:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                                    "typeString": "struct OrderBookBase.Order"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 93,
                            "initialValue": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 90,
                                "name": "marketOrders",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1953,
                                "src": "925:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                                  "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                                }
                              },
                              "id": 92,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 91,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "938:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "925:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_storage",
                                "typeString": "struct OrderBookBase.Order storage ref"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "904:42:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 99,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 94,
                                  "name": "accountsAll",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 52,
                                  "src": "961:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 96,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 95,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 40,
                                  "src": "973:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "961:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 97,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 89,
                                  "src": "982:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                    "typeString": "struct OrderBookBase.Order memory"
                                  }
                                },
                                "id": 98,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "to",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1902,
                                "src": "982:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "961:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 100,
                            "nodeType": "ExpressionStatement",
                            "src": "961:29:0"
                          },
                          {
                            "assignments": [
                              102
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 102,
                                "name": "amountTake",
                                "nodeType": "VariableDeclaration",
                                "scope": 188,
                                "src": "1005:15:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 101,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1005:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 111,
                            "initialValue": {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 103,
                                  "name": "amountLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 36,
                                  "src": "1023:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 104,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1036:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 105,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amountRemain",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1910,
                                  "src": "1036:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1023:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 109,
                                "name": "amountLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 36,
                                "src": "1078:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 110,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "1023:65:0",
                              "trueExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 107,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 89,
                                  "src": "1057:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                    "typeString": "struct OrderBookBase.Order memory"
                                  }
                                },
                                "id": 108,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountRemain",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1910,
                                "src": "1057:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1005:83:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 119,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 112,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 89,
                                  "src": "1103:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                    "typeString": "struct OrderBookBase.Order memory"
                                  }
                                },
                                "id": 114,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "amountRemain",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1910,
                                "src": "1103:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 118,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 115,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1124:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 116,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amountRemain",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1910,
                                  "src": "1124:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 117,
                                  "name": "amountTake",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 102,
                                  "src": "1145:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1124:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1103:52:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 120,
                            "nodeType": "ExpressionStatement",
                            "src": "1103:52:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 125,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 121,
                                  "name": "amountsOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 62,
                                  "src": "1170:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 123,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 122,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 40,
                                  "src": "1181:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "1170:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 124,
                                "name": "amountTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 102,
                                "src": "1190:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1170:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 126,
                            "nodeType": "ExpressionStatement",
                            "src": "1170:30:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 127,
                                "name": "amountLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 36,
                                "src": "1217:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 128,
                                  "name": "amountLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 36,
                                  "src": "1230:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 129,
                                  "name": "amountTake",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 102,
                                  "src": "1243:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1230:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1217:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 132,
                            "nodeType": "ExpressionStatement",
                            "src": "1217:36:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 133,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 89,
                                  "src": "1272:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                    "typeString": "struct OrderBookBase.Order memory"
                                  }
                                },
                                "id": 134,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountRemain",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1910,
                                "src": "1272:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 135,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1294:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1272:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 165,
                            "nodeType": "IfStatement",
                            "src": "1268:318:0",
                            "trueBody": {
                              "id": 164,
                              "nodeType": "Block",
                              "src": "1297:289:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 143,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 137,
                                          "name": "marketOrders",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1953,
                                          "src": "1316:12:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                                            "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                                          }
                                        },
                                        "id": 139,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 138,
                                          "name": "orderId",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 77,
                                          "src": "1329:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "1316:21:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Order_$1915_storage",
                                          "typeString": "struct OrderBookBase.Order storage ref"
                                        }
                                      },
                                      "id": 140,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "memberName": "amountRemain",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1910,
                                      "src": "1316:34:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 141,
                                        "name": "order",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 89,
                                        "src": "1353:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                          "typeString": "struct OrderBookBase.Order memory"
                                        }
                                      },
                                      "id": 142,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amountRemain",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1910,
                                      "src": "1353:18:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1316:55:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 144,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1316:55:0"
                                },
                                {
                                  "eventCall": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 146,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 89,
                                          "src": "1407:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                            "typeString": "struct OrderBookBase.Order memory"
                                          }
                                        },
                                        "id": 147,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "owner",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1900,
                                        "src": "1407:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 148,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 89,
                                          "src": "1420:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                            "typeString": "struct OrderBookBase.Order memory"
                                          }
                                        },
                                        "id": 149,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "to",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1902,
                                        "src": "1420:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 150,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 89,
                                          "src": "1430:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                            "typeString": "struct OrderBookBase.Order memory"
                                          }
                                        },
                                        "id": 151,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "price",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1906,
                                        "src": "1430:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 152,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 89,
                                          "src": "1443:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                            "typeString": "struct OrderBookBase.Order memory"
                                          }
                                        },
                                        "id": 153,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "amountOffer",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1908,
                                        "src": "1443:17:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 154,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 89,
                                          "src": "1462:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                            "typeString": "struct OrderBookBase.Order memory"
                                          }
                                        },
                                        "id": 155,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "amountRemain",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1910,
                                        "src": "1462:40:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 156,
                                          "name": "order",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 89,
                                          "src": "1504:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                            "typeString": "struct OrderBookBase.Order memory"
                                          }
                                        },
                                        "id": 157,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "orderType",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1912,
                                        "src": "1504:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 145,
                                      "name": "OrderUpdate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1986,
                                      "src": "1395:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                                      }
                                    },
                                    "id": 158,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1395:125:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 159,
                                  "nodeType": "EmitStatement",
                                  "src": "1390:130:0"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 161,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "1539:7:0",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "id": 160,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 40,
                                      "src": "1539:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 162,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1539:7:0"
                                },
                                {
                                  "id": 163,
                                  "nodeType": "Break",
                                  "src": "1565:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 167,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 89,
                                  "src": "1632:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                    "typeString": "struct OrderBookBase.Order memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                    "typeString": "struct OrderBookBase.Order memory"
                                  }
                                ],
                                "id": 166,
                                "name": "_removeFrontLimitOrderOfQueue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2640,
                                "src": "1602:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Order_$1915_memory_ptr_$returns$__$",
                                  "typeString": "function (struct OrderBookBase.Order memory)"
                                }
                              },
                              "id": 168,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1602:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 169,
                            "nodeType": "ExpressionStatement",
                            "src": "1602:36:0"
                          },
                          {
                            "eventCall": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 171,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1672:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 172,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1900,
                                  "src": "1672:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 173,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1685:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 174,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "to",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1902,
                                  "src": "1685:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 175,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1695:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 176,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "price",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1906,
                                  "src": "1695:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 177,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1708:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 178,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amountOffer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1908,
                                  "src": "1708:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 179,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1727:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 180,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "amountRemain",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1910,
                                  "src": "1727:36:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 181,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 89,
                                    "src": "1765:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 182,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "orderType",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1912,
                                  "src": "1765:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 170,
                                "name": "OrderClosed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2000,
                                "src": "1660:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "id": 183,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1660:121:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 184,
                            "nodeType": "EmitStatement",
                            "src": "1655:126:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 186,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "1796:7:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 185,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 40,
                                "src": "1796:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 187,
                            "nodeType": "ExpressionStatement",
                            "src": "1796:7:0"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 75,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 71,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 69,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 40,
                            "src": "765:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 70,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43,
                            "src": "773:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "765:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 74,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 72,
                            "name": "amountLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36,
                            "src": "783:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 73,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "796:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "783:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "765:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 189,
                      "nodeType": "WhileStatement",
                      "src": "758:1057:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 190,
                          "name": "index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 40,
                          "src": "1831:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1839:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1831:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 244,
                      "nodeType": "IfStatement",
                      "src": "1827:359:0",
                      "trueBody": {
                        "id": 243,
                        "nodeType": "Block",
                        "src": "1842:344:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 193,
                                "name": "accountsTo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30,
                                "src": "1857:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 196,
                                    "name": "accountsAll",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52,
                                    "src": "1888:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 197,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 40,
                                    "src": "1901:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 194,
                                    "name": "Arrays",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5291,
                                    "src": "1870:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Arrays_$5291_$",
                                      "typeString": "type(library Arrays)"
                                    }
                                  },
                                  "id": 195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "subAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5290,
                                  "src": "1870:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                    "typeString": "function (address[] memory,uint256) pure returns (address[] memory)"
                                  }
                                },
                                "id": 198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1870:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "src": "1857:50:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 200,
                            "nodeType": "ExpressionStatement",
                            "src": "1857:50:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 201,
                                "name": "amountsTo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33,
                                "src": "1922:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 205,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 40,
                                    "src": "1945:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 204,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "1934:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                                    "typeString": "function (uint256) pure returns (uint256[] memory)"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 202,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1938:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 203,
                                    "length": null,
                                    "nodeType": "ArrayTypeName",
                                    "src": "1938:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                      "typeString": "uint256[]"
                                    }
                                  }
                                },
                                "id": 206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1934:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "src": "1922:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 208,
                            "nodeType": "ExpressionStatement",
                            "src": "1922:29:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 210,
                                      "name": "amountsTo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 33,
                                      "src": "1974:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 211,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1974:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 212,
                                      "name": "amountsOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 62,
                                      "src": "1994:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 213,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1994:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1974:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "496e64657820496e76616c6964",
                                  "id": 215,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2013:15:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_8f5f4d0a4c1523f67bacb413a26b2b39a91888da359108fbb0017c671e21444e",
                                    "typeString": "literal_string \"Index Invalid\""
                                  },
                                  "value": "Index Invalid"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_8f5f4d0a4c1523f67bacb413a26b2b39a91888da359108fbb0017c671e21444e",
                                    "typeString": "literal_string \"Index Invalid\""
                                  }
                                ],
                                "id": 209,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "1966:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 216,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1966:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 217,
                            "nodeType": "ExpressionStatement",
                            "src": "1966:63:0"
                          },
                          {
                            "body": {
                              "id": 241,
                              "nodeType": "Block",
                              "src": "2071:104:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 239,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 227,
                                        "name": "amountsTo",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 33,
                                        "src": "2090:9:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 229,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 228,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 219,
                                        "src": "2100:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "2090:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 237,
                                          "name": "amountOutWithFee",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24,
                                          "src": "2142:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 232,
                                                "name": "amountsOut",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 62,
                                                "src": "2123:10:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                  "typeString": "uint256[] memory"
                                                }
                                              },
                                              "id": 234,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 233,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 219,
                                                "src": "2134:1:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "2123:13:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 230,
                                              "name": "amountInOffer",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22,
                                              "src": "2105:13:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "id": 231,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "mul",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6803,
                                            "src": "2105:17:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 235,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2105:32:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "div",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6817,
                                        "src": "2105:36:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 238,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2105:54:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2090:69:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 240,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2090:69:0"
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 221,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 219,
                                "src": "2057:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 222,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 40,
                                "src": "2059:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2057:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 242,
                            "initializationExpression": {
                              "assignments": [
                                219
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 219,
                                  "name": "i",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 242,
                                  "src": "2049:6:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 218,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2049:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 220,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2049:6:0"
                            },
                            "loopExpression": {
                              "expression": {
                                "argumentTypes": null,
                                "id": 225,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2066:3:0",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 224,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 219,
                                  "src": "2066:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 226,
                              "nodeType": "ExpressionStatement",
                              "src": "2066:3:0"
                            },
                            "nodeType": "ForStatement",
                            "src": "2044:131:0"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 246,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_takeLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 27,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 20,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 246,
                      "src": "333:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "333:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 22,
                      "name": "amountInOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 246,
                      "src": "358:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "358:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 24,
                      "name": "amountOutWithFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 246,
                      "src": "387:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "387:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 26,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 246,
                      "src": "419:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "419:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "322:108:0"
                },
                "returnParameters": {
                  "id": 34,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 30,
                      "name": "accountsTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 246,
                      "src": "459:27:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "459:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 29,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "459:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 33,
                      "name": "amountsTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 246,
                      "src": "488:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 31,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "488:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 32,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "488:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "458:54:0"
                },
                "scope": 1876,
                "src": "298:1895:0",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 299,
                  "nodeType": "Block",
                  "src": "2479:362:0",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 269,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 257,
                              "src": "2491:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 270,
                              "name": "amountOutWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 259,
                              "src": "2501:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 271,
                              "name": "communityFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 261,
                              "src": "2519:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 272,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "2490:42:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 275,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 248,
                              "src": "2591:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 276,
                              "name": "amountInOffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 250,
                              "src": "2602:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 277,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 252,
                              "src": "2617:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 278,
                              "name": "baseDecimal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1937,
                              "src": "2624:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 279,
                              "name": "protocolFeeRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1947,
                              "src": "2637:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 280,
                              "name": "subsidyFeeRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1949,
                              "src": "2654:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 281,
                              "name": "orderAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 254,
                              "src": "2670:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 273,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "2535:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAmountOutForTakePrice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6577,
                            "src": "2535:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256)"
                            }
                          },
                          "id": 282,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2535:147:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256)"
                          }
                        },
                        "src": "2490:192:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 284,
                      "nodeType": "ExpressionStatement",
                      "src": "2490:192:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 285,
                              "name": "accountsTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 264,
                              "src": "2694:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 286,
                              "name": "amountsTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 267,
                              "src": "2706:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "id": 287,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "2693:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(address[] memory,uint256[] memory)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 291,
                                  "name": "direction",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 248,
                                  "src": "2787:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 289,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "2749:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 290,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getOppositeDirection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5410,
                                "src": "2749:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 292,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2749:48:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 293,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 257,
                              "src": "2799:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 294,
                              "name": "amountOutWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 259,
                              "src": "2809:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 295,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 252,
                              "src": "2827:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 288,
                            "name": "_takeLimitOrder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 246,
                            "src": "2719:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256,uint256,uint256,uint256) returns (address[] memory,uint256[] memory)"
                            }
                          },
                          "id": 296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2719:114:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(address[] memory,uint256[] memory)"
                          }
                        },
                        "src": "2693:140:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 298,
                      "nodeType": "ExpressionStatement",
                      "src": "2693:140:0"
                    }
                  ]
                },
                "documentation": null,
                "id": 300,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_getAmountAndTake",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 255,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 248,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2238:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 247,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2238:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 250,
                      "name": "amountInOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2263:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 249,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2263:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 252,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2292:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 251,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2292:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 254,
                      "name": "orderAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2313:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 253,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2313:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2227:103:0"
                },
                "returnParameters": {
                  "id": 268,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 257,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2359:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 256,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2359:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 259,
                      "name": "amountOutWithFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2374:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 258,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2374:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 261,
                      "name": "communityFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2397:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 260,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2397:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 264,
                      "name": "accountsTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2425:27:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 262,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2425:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 263,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2425:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 267,
                      "name": "amountsTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 300,
                      "src": "2454:23:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 265,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2454:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 266,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2454:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2358:120:0"
                },
                "scope": 1876,
                "src": "2201:640:0",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 387,
                  "nodeType": "Block",
                  "src": "3209:625:0",
                  "statements": [
                    {
                      "assignments": [
                        330
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 330,
                          "name": "amountOutWithFee",
                          "nodeType": "VariableDeclaration",
                          "scope": 387,
                          "src": "3220:21:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 329,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3220:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 331,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3220:21:0"
                    },
                    {
                      "assignments": [
                        333
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 333,
                          "name": "communityFee",
                          "nodeType": "VariableDeclaration",
                          "scope": 387,
                          "src": "3252:17:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 332,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3252:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 334,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3252:17:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 347,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 335,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 319,
                              "src": "3281:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 336,
                              "name": "amountOutWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "3291:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 337,
                              "name": "communityFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 333,
                              "src": "3309:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 338,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 324,
                              "src": "3323:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 339,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 327,
                              "src": "3333:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "id": 340,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "3280:61:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(uint256,uint256,uint256,address[] memory,uint256[] memory)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 342,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 304,
                              "src": "3375:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 343,
                              "name": "amountInOffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 306,
                              "src": "3386:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 344,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 308,
                              "src": "3401:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 345,
                              "name": "orderAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 310,
                              "src": "3408:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 341,
                            "name": "_getAmountAndTake",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 300,
                            "src": "3357:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256,uint256,uint256,uint256) returns (uint256,uint256,uint256,address[] memory,uint256[] memory)"
                            }
                          },
                          "id": 346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3357:63:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(uint256,uint256,uint256,address[] memory,uint256[] memory)"
                          }
                        },
                        "src": "3280:140:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 348,
                      "nodeType": "ExpressionStatement",
                      "src": "3280:140:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 349,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 327,
                          "src": "3431:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 352,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 327,
                              "src": "3459:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 353,
                              "name": "_amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 316,
                              "src": "3468:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 350,
                              "name": "Arrays",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5291,
                              "src": "3441:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Arrays_$5291_$",
                                "typeString": "type(library Arrays)"
                              }
                            },
                            "id": 351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "extendUint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5161,
                            "src": "3441:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"
                            }
                          },
                          "id": 354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3441:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "src": "3431:46:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 356,
                      "nodeType": "ExpressionStatement",
                      "src": "3431:46:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 357,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 324,
                          "src": "3488:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 360,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 324,
                              "src": "3520:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 361,
                              "name": "_accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 313,
                              "src": "3530:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 358,
                              "name": "Arrays",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5291,
                              "src": "3499:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Arrays_$5291_$",
                                "typeString": "type(library Arrays)"
                              }
                            },
                            "id": 359,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "extendAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5231,
                            "src": "3499:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                              "typeString": "function (address[] memory,address[] memory) pure returns (address[] memory)"
                            }
                          },
                          "id": 362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3499:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "src": "3488:52:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 364,
                      "nodeType": "ExpressionStatement",
                      "src": "3488:52:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 365,
                          "name": "amountOutWithSubsidyFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 321,
                          "src": "3551:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 368,
                              "name": "communityFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 333,
                              "src": "3598:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 366,
                              "name": "amountOutWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 330,
                              "src": "3577:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 367,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6775,
                            "src": "3577:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3577:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3551:60:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 371,
                      "nodeType": "ExpressionStatement",
                      "src": "3551:60:0"
                    },
                    {
                      "assignments": [
                        373
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 373,
                          "name": "tokenOut",
                          "nodeType": "VariableDeclaration",
                          "scope": 387,
                          "src": "3697:16:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 372,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3697:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 380,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 374,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 304,
                            "src": "3716:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 375,
                            "name": "LIMIT_BUY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4110,
                            "src": "3729:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3716:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "id": 378,
                          "name": "quoteToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1941,
                          "src": "3753:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "3716:47:0",
                        "trueExpression": {
                          "argumentTypes": null,
                          "id": 377,
                          "name": "baseToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1939,
                          "src": "3741:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3697:66:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 382,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 373,
                            "src": "3788:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 383,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 302,
                            "src": "3798:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 384,
                            "name": "amountOutWithSubsidyFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 321,
                            "src": "3802:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 381,
                          "name": "_safeTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2234,
                          "src": "3774:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3774:52:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 386,
                      "nodeType": "ExpressionStatement",
                      "src": "3774:52:0"
                    }
                  ]
                },
                "documentation": null,
                "id": 388,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_getAmountAndPay",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 317,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 302,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "2885:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 301,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2885:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 304,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "2906:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 303,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2906:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 306,
                      "name": "amountInOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "2948:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 305,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2948:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 308,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "2977:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 307,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2977:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 310,
                      "name": "orderAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "2998:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 309,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2998:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 313,
                      "name": "_accounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "3025:26:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 311,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3025:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 312,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3025:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 316,
                      "name": "_amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "3062:22:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 314,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3062:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 315,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3062:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2874:211:0"
                },
                "returnParameters": {
                  "id": 328,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 319,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "3114:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 318,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3114:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 321,
                      "name": "amountOutWithSubsidyFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "3129:28:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 320,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3129:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 324,
                      "name": "accounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "3159:25:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 322,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3159:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 323,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3159:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 327,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 388,
                      "src": "3186:21:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 325,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3186:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 326,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3186:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3113:95:0"
                },
                "scope": 1876,
                "src": "2849:985:0",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 492,
                  "nodeType": "Block",
                  "src": "4004:693:0",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 402,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 392,
                            "src": "4031:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 403,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1931,
                            "src": "4040:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 404,
                            "name": "amountAmmIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 396,
                            "src": "4046:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 401,
                          "name": "_safeTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2234,
                          "src": "4017:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4017:41:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 406,
                      "nodeType": "ExpressionStatement",
                      "src": "4017:41:0"
                    },
                    {
                      "assignments": [
                        408,
                        410
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 408,
                          "name": "amount0Out",
                          "nodeType": "VariableDeclaration",
                          "scope": 492,
                          "src": "4072:15:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 407,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4072:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 410,
                          "name": "amount1Out",
                          "nodeType": "VariableDeclaration",
                          "scope": 492,
                          "src": "4089:15:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 409,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4089:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 429,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 411,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 394,
                            "src": "4108:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 413,
                                    "name": "pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1931,
                                    "src": "4135:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 412,
                                  "name": "IUniswapV2Pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5069,
                                  "src": "4120:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                    "typeString": "type(contract IUniswapV2Pair)"
                                  }
                                },
                                "id": 414,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4120:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                                  "typeString": "contract IUniswapV2Pair"
                                }
                              },
                              "id": 415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4991,
                              "src": "4120:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4120:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4108:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 423,
                              "name": "amountAmmOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 398,
                              "src": "4192:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 425,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4211:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4206:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint"
                              },
                              "id": 426,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4206:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 427,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4191:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "id": 428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "4108:106:0",
                        "trueExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 419,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4171:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4166:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint"
                              },
                              "id": 420,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4166:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 421,
                              "name": "amountAmmOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 398,
                              "src": "4175:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 422,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4165:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "4071:143:0"
                    },
                    {
                      "assignments": [
                        431
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 431,
                          "name": "WETH",
                          "nodeType": "VariableDeclaration",
                          "scope": 492,
                          "src": "4227:12:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 430,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4227:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 437,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 433,
                                "name": "factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1929,
                                "src": "4260:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 432,
                              "name": "IOrderBookFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4738,
                              "src": "4242:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IOrderBookFactory_$4738_$",
                                "typeString": "type(contract IOrderBookFactory)"
                              }
                            },
                            "id": 434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4242:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IOrderBookFactory_$4738",
                              "typeString": "contract IOrderBookFactory"
                            }
                          },
                          "id": 435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "WETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4700,
                          "src": "4242:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                            "typeString": "function () pure external returns (address)"
                          }
                        },
                        "id": 436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4242:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "4227:48:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 438,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 431,
                          "src": "4290:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 439,
                          "name": "tokenOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 394,
                          "src": "4298:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4290:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 484,
                        "nodeType": "Block",
                        "src": "4548:102:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 475,
                                  "name": "amount0Out",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 408,
                                  "src": "4597:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 476,
                                  "name": "amount1Out",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 410,
                                  "src": "4609:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 477,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 390,
                                  "src": "4621:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 480,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4635:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 479,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "NewExpression",
                                    "src": "4625:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                                      "typeString": "function (uint256) pure returns (bytes memory)"
                                    },
                                    "typeName": {
                                      "id": 478,
                                      "name": "bytes",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4629:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                      }
                                    }
                                  },
                                  "id": 481,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4625:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 472,
                                      "name": "pair",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1931,
                                      "src": "4578:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 471,
                                    "name": "IUniswapV2Pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "4563:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                      "typeString": "type(contract IUniswapV2Pair)"
                                    }
                                  },
                                  "id": 473,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4563:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                                    "typeString": "contract IUniswapV2Pair"
                                  }
                                },
                                "id": 474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "swapOriginal",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5053,
                                "src": "4563:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                  "typeString": "function (uint256,uint256,address,bytes memory) external"
                                }
                              },
                              "id": 482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4563:75:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 483,
                            "nodeType": "ExpressionStatement",
                            "src": "4563:75:0"
                          }
                        ]
                      },
                      "id": 485,
                      "nodeType": "IfStatement",
                      "src": "4286:364:0",
                      "trueBody": {
                        "id": 470,
                        "nodeType": "Block",
                        "src": "4308:225:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 445,
                                  "name": "amount0Out",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 408,
                                  "src": "4357:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 446,
                                  "name": "amount1Out",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 410,
                                  "src": "4369:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 448,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7337,
                                      "src": "4389:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_OrderBook_$1876",
                                        "typeString": "contract OrderBook"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_OrderBook_$1876",
                                        "typeString": "contract OrderBook"
                                      }
                                    ],
                                    "id": 447,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4381:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4381:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 452,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4406:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 451,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "NewExpression",
                                    "src": "4396:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                                      "typeString": "function (uint256) pure returns (bytes memory)"
                                    },
                                    "typeName": {
                                      "id": 450,
                                      "name": "bytes",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4400:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                      }
                                    }
                                  },
                                  "id": 453,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4396:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 442,
                                      "name": "pair",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1931,
                                      "src": "4338:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 441,
                                    "name": "IUniswapV2Pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "4323:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                      "typeString": "type(contract IUniswapV2Pair)"
                                    }
                                  },
                                  "id": 443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4323:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                                    "typeString": "contract IUniswapV2Pair"
                                  }
                                },
                                "id": 444,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "swapOriginal",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5053,
                                "src": "4323:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                  "typeString": "function (uint256,uint256,address,bytes memory) external"
                                }
                              },
                              "id": 454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4323:86:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 455,
                            "nodeType": "ExpressionStatement",
                            "src": "4323:86:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 460,
                                  "name": "amountAmmOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 398,
                                  "src": "4445:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 457,
                                      "name": "WETH",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 431,
                                      "src": "4430:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 456,
                                    "name": "IWETH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5089,
                                    "src": "4424:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IWETH_$5089_$",
                                      "typeString": "type(contract IWETH)"
                                    }
                                  },
                                  "id": 458,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4424:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IWETH_$5089",
                                    "typeString": "contract IWETH"
                                  }
                                },
                                "id": 459,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "withdraw",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5088,
                                "src": "4424:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256) external"
                                }
                              },
                              "id": 461,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4424:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 462,
                            "nodeType": "ExpressionStatement",
                            "src": "4424:34:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 466,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 390,
                                  "src": "4504:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 467,
                                  "name": "amountAmmOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 398,
                                  "src": "4508:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 463,
                                  "name": "TransferHelper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6976,
                                  "src": "4473:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TransferHelper_$6976_$",
                                    "typeString": "type(library TransferHelper)"
                                  }
                                },
                                "id": 465,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "safeTransferETH",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6975,
                                "src": "4473:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256)"
                                }
                              },
                              "id": 468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4473:48:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 469,
                            "nodeType": "ExpressionStatement",
                            "src": "4473:48:0"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 487,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1931,
                                "src": "4677:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 486,
                              "name": "IUniswapV2Pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5069,
                              "src": "4662:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                "typeString": "type(contract IUniswapV2Pair)"
                              }
                            },
                            "id": 488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4662:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                              "typeString": "contract IUniswapV2Pair"
                            }
                          },
                          "id": 489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sync",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5061,
                          "src": "4662:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                            "typeString": "function () external"
                          }
                        },
                        "id": 490,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4662:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 491,
                      "nodeType": "ExpressionStatement",
                      "src": "4662:27:0"
                    }
                  ]
                },
                "documentation": null,
                "id": 493,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_ammSwapPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 399,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 390,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 493,
                      "src": "3875:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 389,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3875:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 392,
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 493,
                      "src": "3896:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 391,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3896:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 394,
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 493,
                      "src": "3922:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 393,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3922:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 396,
                      "name": "amountAmmIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 493,
                      "src": "3949:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 395,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3949:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 398,
                      "name": "amountAmmOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 493,
                      "src": "3976:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 397,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3976:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3864:130:0"
                },
                "returnParameters": {
                  "id": 400,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "4004:0:0"
                },
                "scope": 1876,
                "src": "3842:855:0",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 789,
                  "nodeType": "Block",
                  "src": "5093:3078:0",
                  "statements": [
                    {
                      "assignments": [
                        507
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 507,
                          "name": "reserves",
                          "nodeType": "VariableDeclaration",
                          "scope": 789,
                          "src": "5104:22:0",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 505,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5104:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 506,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5104:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 513,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 511,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5140:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            }
                          ],
                          "id": 510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "5129:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 508,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5133:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 509,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "5133:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 512,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5129:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5104:38:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 514,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5216:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 516,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 515,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5225: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": "5216:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 517,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5229:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 519,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5238: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": "5229:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 520,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "5215:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 523,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1931,
                              "src": "5273:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 524,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1939,
                              "src": "5279:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 525,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "5290:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 521,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "5244:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 522,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5682,
                            "src": "5244:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                              "typeString": "function (address,address,address) view returns (uint112,uint112)"
                            }
                          },
                          "id": 526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5244:57:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "src": "5215:86:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 528,
                      "nodeType": "ExpressionStatement",
                      "src": "5215:86:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 529,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5313:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 531,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5322:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "5313:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 532,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5326:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 534,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 533,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5335:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "5326:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 535,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "5312:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 536,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5342:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 538,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 537,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5351:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5342:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 539,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "5355:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 541,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5364:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5355:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 542,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5341:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "src": "5312:55:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 544,
                      "nodeType": "ExpressionStatement",
                      "src": "5312:55:0"
                    },
                    {
                      "assignments": [
                        546
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 546,
                          "name": "liquidityExists",
                          "nodeType": "VariableDeclaration",
                          "scope": 789,
                          "src": "5378:20:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 545,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "5378:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 558,
                      "initialValue": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 557,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 547,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 507,
                              "src": "5401:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 549,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 548,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5410:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5401:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5415:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5401:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 552,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 507,
                              "src": "5420:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 554,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5429:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5420:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5434:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5420:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5401:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5378:57:0"
                    },
                    {
                      "assignments": [
                        560
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 560,
                          "name": "amountAmmBase",
                          "nodeType": "VariableDeclaration",
                          "scope": 789,
                          "src": "5446:18:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 559,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "5446:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 561,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5446:18:0"
                    },
                    {
                      "assignments": [
                        563
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 563,
                          "name": "amountAmmQuote",
                          "nodeType": "VariableDeclaration",
                          "scope": 789,
                          "src": "5475:19:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 562,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "5475:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 564,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5475:19:0"
                    },
                    {
                      "assignments": [
                        566
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 566,
                          "name": "amountOrderBookOut",
                          "nodeType": "VariableDeclaration",
                          "scope": 789,
                          "src": "5505:23:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 565,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "5505:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 567,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5505:23:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 568,
                          "name": "amountLeft",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 502,
                          "src": "5539:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 569,
                          "name": "amountOffer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 495,
                          "src": "5552:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5539:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 571,
                      "nodeType": "ExpressionStatement",
                      "src": "5539:24:0"
                    },
                    {
                      "assignments": [
                        573
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 573,
                          "name": "price",
                          "nodeType": "VariableDeclaration",
                          "scope": 789,
                          "src": "5576:10:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 572,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "5576:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 578,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 575,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4113,
                            "src": "5599:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5611:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 574,
                          "name": "nextPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4349,
                          "src": "5589:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5589:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5576:37:0"
                    },
                    {
                      "body": {
                        "id": 692,
                        "nodeType": "Block",
                        "src": "5667:1409:0",
                        "statements": [
                          {
                            "assignments": [
                              587
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 587,
                                "name": "amountAmmLeft",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "5682:18:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 586,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5682:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 589,
                            "initialValue": {
                              "argumentTypes": null,
                              "id": 588,
                              "name": "amountLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 502,
                              "src": "5703:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "5682:31:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "id": 590,
                              "name": "liquidityExists",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 546,
                              "src": "5788:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 627,
                            "nodeType": "IfStatement",
                            "src": "5784:455:0",
                            "trueBody": {
                              "id": 626,
                              "nodeType": "Block",
                              "src": "5805:434:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 614,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "id": 591,
                                          "name": "amountAmmLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 587,
                                          "src": "5825:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 592,
                                          "name": "amountAmmBase",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 560,
                                          "src": "5840:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 593,
                                          "name": "amountAmmQuote",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 563,
                                          "src": "5855:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 594,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 507,
                                            "src": "5871:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 596,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 595,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5880:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "5871:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 597,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 507,
                                            "src": "5884:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 599,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "33",
                                            "id": 598,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5893:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            },
                                            "value": "3"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "5884:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 600,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "5824:72:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 603,
                                          "name": "LIMIT_BUY",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4110,
                                          "src": "5959:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 604,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 502,
                                          "src": "5970:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 605,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 507,
                                            "src": "6007:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 607,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 606,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6016:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "6007:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 608,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 507,
                                            "src": "6020:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 610,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 609,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6029:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "6020:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 611,
                                          "name": "price",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 573,
                                          "src": "6033:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 612,
                                          "name": "baseDecimal",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1937,
                                          "src": "6040:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 601,
                                          "name": "OrderBookLibrary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6729,
                                          "src": "5920:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                            "typeString": "type(library OrderBookLibrary)"
                                          }
                                        },
                                        "id": 602,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "getAmountForMovePrice",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6177,
                                        "src": "5920:38:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                        }
                                      },
                                      "id": 613,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5920:132:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                      }
                                    },
                                    "src": "5824:228:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 615,
                                  "nodeType": "ExpressionStatement",
                                  "src": "5824:228:0"
                                },
                                {
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 618,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 616,
                                      "name": "amountAmmLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 587,
                                      "src": "6075:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 617,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6092:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "6075:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseBody": null,
                                  "id": 625,
                                  "nodeType": "IfStatement",
                                  "src": "6071:153:0",
                                  "trueBody": {
                                    "id": 624,
                                    "nodeType": "Block",
                                    "src": "6095:129:0",
                                    "statements": [
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 621,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 619,
                                            "name": "amountLeft",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 502,
                                            "src": "6118:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 620,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6131:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "src": "6118:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 622,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6118:14:0"
                                      },
                                      {
                                        "id": 623,
                                        "nodeType": "Break",
                                        "src": "6199:5:0"
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              629
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 629,
                                "name": "amount",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "6255:11:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 628,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6255:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 634,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 631,
                                  "name": "LIMIT_SELL",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4113,
                                  "src": "6277:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 632,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 573,
                                  "src": "6289:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 630,
                                "name": "listAgg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2852,
                                "src": "6269:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) view returns (uint256)"
                                }
                              },
                              "id": 633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6269:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "6255:40:0"
                          },
                          {
                            "assignments": [
                              636,
                              638,
                              640,
                              643,
                              646
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 636,
                                "name": "amountInForTake",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "6359:20:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 635,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6359:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 638,
                                "name": "amountOutWithFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "6394:21:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 637,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6394:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 640,
                                "name": "communityFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "6430:17:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 639,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6430:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 643,
                                "name": "accounts",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "6462:25:0",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[]"
                                },
                                "typeName": {
                                  "baseType": {
                                    "id": 641,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6462:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 642,
                                  "length": null,
                                  "nodeType": "ArrayTypeName",
                                  "src": "6462:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                    "typeString": "address[]"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 646,
                                "name": "amounts",
                                "nodeType": "VariableDeclaration",
                                "scope": 692,
                                "src": "6502:21:0",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[]"
                                },
                                "typeName": {
                                  "baseType": {
                                    "id": 644,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6502:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 645,
                                  "length": null,
                                  "nodeType": "ArrayTypeName",
                                  "src": "6502:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                    "typeString": "uint256[]"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 653,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 648,
                                  "name": "LIMIT_BUY",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4110,
                                  "src": "6545:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 649,
                                  "name": "amountAmmLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 587,
                                  "src": "6556:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 650,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 573,
                                  "src": "6571:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 651,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 629,
                                  "src": "6578:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 647,
                                "name": "_getAmountAndTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 300,
                                "src": "6527:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) returns (uint256,uint256,uint256,address[] memory,uint256[] memory)"
                                }
                              },
                              "id": 652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6527:58:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                "typeString": "tuple(uint256,uint256,uint256,address[] memory,uint256[] memory)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "6358:227:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 654,
                                "name": "amountOrderBookOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 566,
                                "src": "6600:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 657,
                                    "name": "communityFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 640,
                                    "src": "6643:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 655,
                                    "name": "amountOutWithFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 638,
                                    "src": "6622:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 656,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "6622:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 658,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6622:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6600:56:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 660,
                            "nodeType": "ExpressionStatement",
                            "src": "6600:56:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 662,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "6686:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 663,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 643,
                                  "src": "6698:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 664,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 646,
                                  "src": "6708:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 661,
                                "name": "_batchTransfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2303,
                                "src": "6671:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                                  "typeString": "function (address,address[] memory,uint256[] memory)"
                                }
                              },
                              "id": 665,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6671:45:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 666,
                            "nodeType": "ExpressionStatement",
                            "src": "6671:45:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 667,
                                "name": "amountInForTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 636,
                                "src": "6737:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 668,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 587,
                                "src": "6756:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6737:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 683,
                              "nodeType": "Block",
                              "src": "6932:79:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 681,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 676,
                                      "name": "amountLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 502,
                                      "src": "6951:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 679,
                                          "name": "amountInForTake",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 636,
                                          "src": "6979:15:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 677,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 502,
                                          "src": "6964:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 678,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sub",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6775,
                                        "src": "6964:14:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 680,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6964:31:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6951:44:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 682,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6951:44:0"
                                }
                              ]
                            },
                            "id": 684,
                            "nodeType": "IfStatement",
                            "src": "6733:278:0",
                            "trueBody": {
                              "id": 675,
                              "nodeType": "Block",
                              "src": "6771:155:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 672,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 670,
                                      "name": "amountLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 502,
                                      "src": "6827:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 671,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6840:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "6827:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 673,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6827:14:0"
                                },
                                {
                                  "id": 674,
                                  "nodeType": "Break",
                                  "src": "6905:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 685,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 573,
                                "src": "7027:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 687,
                                    "name": "LIMIT_SELL",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4113,
                                    "src": "7046:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 688,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 573,
                                    "src": "7058:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 686,
                                  "name": "nextPrice2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4380,
                                  "src": "7035:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 689,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7035:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7027:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 691,
                            "nodeType": "ExpressionStatement",
                            "src": "7027:37:0"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 585,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 579,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "5631:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5640:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5631:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 582,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "5645:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 583,
                            "name": "targetPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 497,
                            "src": "5654:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5645:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5631:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 693,
                      "nodeType": "WhileStatement",
                      "src": "5624:1452:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 694,
                          "name": "amountOrderBookOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 566,
                          "src": "7153:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 695,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7174:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7153:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 704,
                      "nodeType": "IfStatement",
                      "src": "7149:105:0",
                      "trueBody": {
                        "id": 703,
                        "nodeType": "Block",
                        "src": "7177:77:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 698,
                                  "name": "baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1939,
                                  "src": "7208:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 699,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 499,
                                  "src": "7219:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 700,
                                  "name": "amountOrderBookOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 566,
                                  "src": "7223:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 697,
                                "name": "_singleTransfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2347,
                                "src": "7192:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7192:50:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 702,
                            "nodeType": "ExpressionStatement",
                            "src": "7192:50:0"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 709,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 705,
                            "name": "liquidityExists",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 546,
                            "src": "7359:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 706,
                              "name": "amountLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 502,
                              "src": "7378:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7391:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "7378:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7359:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 710,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "7396:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 711,
                            "name": "targetPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 497,
                            "src": "7405:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7396:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7359:57:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 740,
                      "nodeType": "IfStatement",
                      "src": "7355:313:0",
                      "trueBody": {
                        "id": 739,
                        "nodeType": "Block",
                        "src": "7418:250:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 714,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 502,
                                    "src": "7434:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 715,
                                    "name": "amountAmmBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 560,
                                    "src": "7446:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 716,
                                    "name": "amountAmmQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 563,
                                    "src": "7461:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 717,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 507,
                                      "src": "7477:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 719,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "32",
                                      "id": 718,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7486:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "7477:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 720,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 507,
                                      "src": "7490:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 722,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "33",
                                      "id": 721,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7499:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "7490:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 723,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "7433:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 726,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "7561:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 727,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 502,
                                    "src": "7572:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 728,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 507,
                                      "src": "7605:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 730,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 729,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7614:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7605:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 731,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 507,
                                      "src": "7618:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 733,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 732,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7627:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7618:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 734,
                                    "name": "targetPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 497,
                                    "src": "7631:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 735,
                                    "name": "baseDecimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1937,
                                    "src": "7644:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 724,
                                    "name": "OrderBookLibrary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6729,
                                    "src": "7522:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                      "typeString": "type(library OrderBookLibrary)"
                                    }
                                  },
                                  "id": 725,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getAmountForMovePrice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6177,
                                  "src": "7522:38:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 736,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7522:134:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "src": "7433:223:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 738,
                            "nodeType": "ExpressionStatement",
                            "src": "7433:223:0"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 741,
                          "name": "amountAmmQuote",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 563,
                          "src": "7684:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7701:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7684:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 788,
                      "nodeType": "IfStatement",
                      "src": "7680:484:0",
                      "trueBody": {
                        "id": 787,
                        "nodeType": "Block",
                        "src": "7704:460:0",
                        "statements": [
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 744,
                                "name": "amountLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 502,
                                "src": "7723:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 745,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7736:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7723:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 766,
                            "nodeType": "IfStatement",
                            "src": "7719:256:0",
                            "trueBody": {
                              "id": 765,
                              "nodeType": "Block",
                              "src": "7739:236:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 763,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "id": 747,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 502,
                                          "src": "7759:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 748,
                                          "name": "amountAmmQuote",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 563,
                                          "src": "7771:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        null
                                      ],
                                      "id": 749,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "7758:29:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$__$",
                                        "typeString": "tuple(uint256,uint256,)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 752,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 502,
                                          "src": "7855:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 753,
                                          "name": "amountAmmQuote",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 563,
                                          "src": "7867:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 754,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 507,
                                            "src": "7883:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 756,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 755,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "7892:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7883:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 757,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 507,
                                            "src": "7896:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 759,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "33",
                                            "id": 758,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "7905:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            },
                                            "value": "3"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7896:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 760,
                                          "name": "targetPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 497,
                                          "src": "7934:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 761,
                                          "name": "baseDecimal",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1937,
                                          "src": "7947:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 750,
                                          "name": "OrderBookLibrary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6729,
                                          "src": "7811:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                            "typeString": "type(library OrderBookLibrary)"
                                          }
                                        },
                                        "id": 751,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "getFixAmountForMovePriceUp",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 5807,
                                        "src": "7811:43:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256)"
                                        }
                                      },
                                      "id": 762,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7811:148:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256,uint256)"
                                      }
                                    },
                                    "src": "7758:201:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 764,
                                  "nodeType": "ExpressionStatement",
                                  "src": "7758:201:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 768,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 499,
                                  "src": "8005:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 769,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "8009:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 770,
                                  "name": "baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1939,
                                  "src": "8021:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 771,
                                  "name": "amountAmmQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 563,
                                  "src": "8032:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 772,
                                  "name": "amountAmmBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 560,
                                  "src": "8048:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 767,
                                "name": "_ammSwapPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 493,
                                "src": "7991:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,address,uint256,uint256)"
                                }
                              },
                              "id": 773,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7991:71:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 774,
                            "nodeType": "ExpressionStatement",
                            "src": "7991:71:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 783,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 776,
                                      "name": "amountLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 502,
                                      "src": "8085:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 777,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8099:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "8085:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 782,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 779,
                                        "name": "getPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2430,
                                        "src": "8104:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                          "typeString": "function () view returns (uint256)"
                                        }
                                      },
                                      "id": 780,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8104:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 781,
                                      "name": "targetPrice",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 497,
                                      "src": "8118:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8104:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "8085:44:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "427579207072696365206d69736d61746368",
                                  "id": 784,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8131:20:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_99cd213cd1070b2db7942f988f08b7de3b3eaf4938f679b2a3646513e18938e8",
                                    "typeString": "literal_string \"Buy price mismatch\""
                                  },
                                  "value": "Buy price mismatch"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_99cd213cd1070b2db7942f988f08b7de3b3eaf4938f679b2a3646513e18938e8",
                                    "typeString": "literal_string \"Buy price mismatch\""
                                  }
                                ],
                                "id": 775,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "8077:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8077:75:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 786,
                            "nodeType": "ExpressionStatement",
                            "src": "8077:75:0"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 790,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_movePriceUp",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 500,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 495,
                      "name": "amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 790,
                      "src": "4982:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 494,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4982:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 497,
                      "name": "targetPrice",
                      "nodeType": "VariableDeclaration",
                      "scope": 790,
                      "src": "5009:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 496,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5009:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 499,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 790,
                      "src": "5036:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 498,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5036:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "4971:76:0"
                },
                "returnParameters": {
                  "id": 503,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 502,
                      "name": "amountLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 790,
                      "src": "5076:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 501,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5076:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5075:17:0"
                },
                "scope": 1876,
                "src": "4950:3221:0",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 1086,
                  "nodeType": "Block",
                  "src": "8569:3080:0",
                  "statements": [
                    {
                      "assignments": [
                        804
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 804,
                          "name": "reserves",
                          "nodeType": "VariableDeclaration",
                          "scope": 1086,
                          "src": "8580:22:0",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 802,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "8580:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 803,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "8580:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 810,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 808,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8616:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            }
                          ],
                          "id": 807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "8605:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 805,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "8609:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 806,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "8609:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 809,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8605:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "8580:38:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 811,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "8692:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 813,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 812,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8701: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": "8692:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 814,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "8705:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 816,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8714: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": "8705:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 817,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "8691:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 820,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1931,
                              "src": "8749:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 821,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1939,
                              "src": "8755:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 822,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "8766:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 818,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "8720:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 819,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5682,
                            "src": "8720:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                              "typeString": "function (address,address,address) view returns (uint112,uint112)"
                            }
                          },
                          "id": 823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8720:57:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "src": "8691:86:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 825,
                      "nodeType": "ExpressionStatement",
                      "src": "8691:86:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 840,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 826,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "8789:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 828,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 827,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8798:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "8789:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 829,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "8802:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 831,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8811:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "8802:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 832,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "8788:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 833,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "8818:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 835,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8827:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8818:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 836,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 804,
                                "src": "8831:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 838,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8840:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8831:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 839,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "8817:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "src": "8788:55:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 841,
                      "nodeType": "ExpressionStatement",
                      "src": "8788:55:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 844,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 842,
                          "name": "amountLeft",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 799,
                          "src": "8854:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 843,
                          "name": "amountOffer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 792,
                          "src": "8867:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8854:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 845,
                      "nodeType": "ExpressionStatement",
                      "src": "8854:24:0"
                    },
                    {
                      "assignments": [
                        847
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 847,
                          "name": "liquidityExists",
                          "nodeType": "VariableDeclaration",
                          "scope": 1086,
                          "src": "8889:20:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 846,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "8889:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 859,
                      "initialValue": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 852,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 848,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 804,
                              "src": "8912:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 850,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8921:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8912:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8926:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8912:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 857,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 853,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 804,
                              "src": "8931:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 855,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 854,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8940:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8931:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 856,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8945:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8931:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8912:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "8889:57:0"
                    },
                    {
                      "assignments": [
                        861
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 861,
                          "name": "amountAmmBase",
                          "nodeType": "VariableDeclaration",
                          "scope": 1086,
                          "src": "8957:18:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 860,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "8957:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 862,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "8957:18:0"
                    },
                    {
                      "assignments": [
                        864
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 864,
                          "name": "amountAmmQuote",
                          "nodeType": "VariableDeclaration",
                          "scope": 1086,
                          "src": "8986:19:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 863,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "8986:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 865,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "8986:19:0"
                    },
                    {
                      "assignments": [
                        867
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 867,
                          "name": "amountOrderBookOut",
                          "nodeType": "VariableDeclaration",
                          "scope": 1086,
                          "src": "9016:23:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 866,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "9016:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 868,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "9016:23:0"
                    },
                    {
                      "assignments": [
                        870
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 870,
                          "name": "price",
                          "nodeType": "VariableDeclaration",
                          "scope": 1086,
                          "src": "9052:10:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 869,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "9052:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 875,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 872,
                            "name": "LIMIT_BUY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4110,
                            "src": "9075:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9086:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 871,
                          "name": "nextPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4349,
                          "src": "9065:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9065:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "9052:36:0"
                    },
                    {
                      "body": {
                        "id": 989,
                        "nodeType": "Block",
                        "src": "9142:1408:0",
                        "statements": [
                          {
                            "assignments": [
                              884
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 884,
                                "name": "amountAmmLeft",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9157:18:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 883,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9157:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 886,
                            "initialValue": {
                              "argumentTypes": null,
                              "id": 885,
                              "name": "amountLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 799,
                              "src": "9178:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9157:31:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "id": 887,
                              "name": "liquidityExists",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 847,
                              "src": "9263:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 924,
                            "nodeType": "IfStatement",
                            "src": "9259:457:0",
                            "trueBody": {
                              "id": 923,
                              "nodeType": "Block",
                              "src": "9280:436:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 911,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "id": 888,
                                          "name": "amountAmmLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 884,
                                          "src": "9300:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 889,
                                          "name": "amountAmmBase",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 861,
                                          "src": "9315:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 890,
                                          "name": "amountAmmQuote",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 864,
                                          "src": "9330:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 891,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 804,
                                            "src": "9346:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 893,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 892,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9355:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "9346:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 894,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 804,
                                            "src": "9359:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 896,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "33",
                                            "id": 895,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9368:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            },
                                            "value": "3"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "9359:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 897,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "9299:72:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 900,
                                          "name": "LIMIT_SELL",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4113,
                                          "src": "9434:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 901,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 799,
                                          "src": "9446:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 902,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 804,
                                            "src": "9483:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 904,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 903,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9492:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "9483:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 905,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 804,
                                            "src": "9496:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 907,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 906,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9505:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "9496:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 908,
                                          "name": "price",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 870,
                                          "src": "9509:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 909,
                                          "name": "baseDecimal",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1937,
                                          "src": "9516:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 898,
                                          "name": "OrderBookLibrary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6729,
                                          "src": "9395:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                            "typeString": "type(library OrderBookLibrary)"
                                          }
                                        },
                                        "id": 899,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "getAmountForMovePrice",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6177,
                                        "src": "9395:38:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                        }
                                      },
                                      "id": 910,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "9395:133:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                      }
                                    },
                                    "src": "9299:229:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 912,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9299:229:0"
                                },
                                {
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 915,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 913,
                                      "name": "amountAmmLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 884,
                                      "src": "9551:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 914,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9568:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "9551:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseBody": null,
                                  "id": 922,
                                  "nodeType": "IfStatement",
                                  "src": "9547:154:0",
                                  "trueBody": {
                                    "id": 921,
                                    "nodeType": "Block",
                                    "src": "9571:130:0",
                                    "statements": [
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 918,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 916,
                                            "name": "amountLeft",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 799,
                                            "src": "9594:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 917,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9607:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "src": "9594:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 919,
                                        "nodeType": "ExpressionStatement",
                                        "src": "9594:14:0"
                                      },
                                      {
                                        "id": 920,
                                        "nodeType": "Break",
                                        "src": "9676:5:0"
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              926
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 926,
                                "name": "amount",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9732:11:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 925,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9732:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 931,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 928,
                                  "name": "LIMIT_BUY",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4110,
                                  "src": "9754:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 929,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 870,
                                  "src": "9765:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 927,
                                "name": "listAgg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2852,
                                "src": "9746:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) view returns (uint256)"
                                }
                              },
                              "id": 930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9746:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9732:39:0"
                          },
                          {
                            "assignments": [
                              933,
                              935,
                              937,
                              940,
                              943
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 933,
                                "name": "amountInForTake",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9835:20:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 932,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9835:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 935,
                                "name": "amountOutWithFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9870:21:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 934,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9870:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 937,
                                "name": "communityFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9906:17:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 936,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9906:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 940,
                                "name": "accounts",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9938:25:0",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[]"
                                },
                                "typeName": {
                                  "baseType": {
                                    "id": 938,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9938:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 939,
                                  "length": null,
                                  "nodeType": "ArrayTypeName",
                                  "src": "9938:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                    "typeString": "address[]"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 943,
                                "name": "amounts",
                                "nodeType": "VariableDeclaration",
                                "scope": 989,
                                "src": "9978:21:0",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[]"
                                },
                                "typeName": {
                                  "baseType": {
                                    "id": 941,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9978:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 942,
                                  "length": null,
                                  "nodeType": "ArrayTypeName",
                                  "src": "9978:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                    "typeString": "uint256[]"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 950,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 945,
                                  "name": "LIMIT_SELL",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4113,
                                  "src": "10021:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 946,
                                  "name": "amountAmmLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 884,
                                  "src": "10033:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 947,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 870,
                                  "src": "10048:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 948,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 926,
                                  "src": "10055:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 944,
                                "name": "_getAmountAndTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 300,
                                "src": "10003:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) returns (uint256,uint256,uint256,address[] memory,uint256[] memory)"
                                }
                              },
                              "id": 949,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10003:59:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                "typeString": "tuple(uint256,uint256,uint256,address[] memory,uint256[] memory)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9834:228:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 956,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 951,
                                "name": "amountOrderBookOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 867,
                                "src": "10077:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 954,
                                    "name": "communityFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 937,
                                    "src": "10120:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 952,
                                    "name": "amountOutWithFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 935,
                                    "src": "10099:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 953,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "10099:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 955,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10099:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10077:56:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 957,
                            "nodeType": "ExpressionStatement",
                            "src": "10077:56:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 959,
                                  "name": "baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1939,
                                  "src": "10163:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 960,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 940,
                                  "src": "10174:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 961,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 943,
                                  "src": "10184:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  },
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 958,
                                "name": "_batchTransfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2303,
                                "src": "10148:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                                  "typeString": "function (address,address[] memory,uint256[] memory)"
                                }
                              },
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10148:44:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 963,
                            "nodeType": "ExpressionStatement",
                            "src": "10148:44:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 964,
                                "name": "amountInForTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 933,
                                "src": "10213:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 965,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 884,
                                "src": "10232:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10213:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 980,
                              "nodeType": "Block",
                              "src": "10407:79:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 978,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 973,
                                      "name": "amountLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 799,
                                      "src": "10426:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 976,
                                          "name": "amountInForTake",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 933,
                                          "src": "10454:15:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 974,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 799,
                                          "src": "10439:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 975,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sub",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6775,
                                        "src": "10439:14:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 977,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10439:31:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "10426:44:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 979,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10426:44:0"
                                }
                              ]
                            },
                            "id": 981,
                            "nodeType": "IfStatement",
                            "src": "10209:277:0",
                            "trueBody": {
                              "id": 972,
                              "nodeType": "Block",
                              "src": "10247:154:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 969,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 967,
                                      "name": "amountLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 799,
                                      "src": "10302:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 968,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10315:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "10302:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 970,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10302:14:0"
                                },
                                {
                                  "id": 971,
                                  "nodeType": "Break",
                                  "src": "10380:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 987,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 982,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 870,
                                "src": "10502:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 984,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "10521:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 985,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 870,
                                    "src": "10532:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 983,
                                  "name": "nextPrice2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4380,
                                  "src": "10510:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10510:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10502:36:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 988,
                            "nodeType": "ExpressionStatement",
                            "src": "10502:36:0"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 876,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 870,
                            "src": "9106:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9115:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9106:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 879,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 870,
                            "src": "9120:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 880,
                            "name": "targetPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 794,
                            "src": "9129:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9120:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9106:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 990,
                      "nodeType": "WhileStatement",
                      "src": "9099:1451:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 991,
                          "name": "amountOrderBookOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 867,
                          "src": "10627:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10648:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "10627:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1001,
                      "nodeType": "IfStatement",
                      "src": "10623:106:0",
                      "trueBody": {
                        "id": 1000,
                        "nodeType": "Block",
                        "src": "10651:78:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 995,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "10682:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 996,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 796,
                                  "src": "10694:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 997,
                                  "name": "amountOrderBookOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 867,
                                  "src": "10698:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 994,
                                "name": "_singleTransfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2347,
                                "src": "10666:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10666:51:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 999,
                            "nodeType": "ExpressionStatement",
                            "src": "10666:51:0"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1002,
                            "name": "liquidityExists",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 847,
                            "src": "10834:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1005,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1003,
                              "name": "amountLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 799,
                              "src": "10853:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10866:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "10853:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10834:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1007,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 870,
                            "src": "10871:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1008,
                            "name": "targetPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 794,
                            "src": "10880:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10871:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10834:57:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1037,
                      "nodeType": "IfStatement",
                      "src": "10830:314:0",
                      "trueBody": {
                        "id": 1036,
                        "nodeType": "Block",
                        "src": "10893:251:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1011,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 799,
                                    "src": "10909:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1012,
                                    "name": "amountAmmBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "10921:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1013,
                                    "name": "amountAmmQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 864,
                                    "src": "10936:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1014,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 804,
                                      "src": "10952:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1016,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "32",
                                      "id": 1015,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10961:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "10952:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1017,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 804,
                                      "src": "10965:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1019,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "33",
                                      "id": 1018,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10974:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "10965:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1020,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "10908:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1023,
                                    "name": "LIMIT_SELL",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4113,
                                    "src": "11036:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1024,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 799,
                                    "src": "11048:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1025,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 804,
                                      "src": "11081:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1027,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 1026,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11090:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "11081:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1028,
                                      "name": "reserves",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 804,
                                      "src": "11094:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1030,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 1029,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11103:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "11094:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1031,
                                    "name": "targetPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 794,
                                    "src": "11107:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1032,
                                    "name": "baseDecimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1937,
                                    "src": "11120:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1021,
                                    "name": "OrderBookLibrary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6729,
                                    "src": "10997:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                      "typeString": "type(library OrderBookLibrary)"
                                    }
                                  },
                                  "id": 1022,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getAmountForMovePrice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6177,
                                  "src": "10997:38:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 1033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10997:135:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "src": "10908:224:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1035,
                            "nodeType": "ExpressionStatement",
                            "src": "10908:224:0"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1040,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1038,
                          "name": "amountAmmBase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 861,
                          "src": "11160:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11176:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11160:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1085,
                      "nodeType": "IfStatement",
                      "src": "11156:486:0",
                      "trueBody": {
                        "id": 1084,
                        "nodeType": "Block",
                        "src": "11179:463:0",
                        "statements": [
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1041,
                                "name": "amountLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 799,
                                "src": "11198:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11211:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11198:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1063,
                            "nodeType": "IfStatement",
                            "src": "11194:256:0",
                            "trueBody": {
                              "id": 1062,
                              "nodeType": "Block",
                              "src": "11214:236:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1044,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 799,
                                          "src": "11234:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 1045,
                                          "name": "amountAmmBase",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 861,
                                          "src": "11246:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        null
                                      ],
                                      "id": 1046,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "11233:28:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$__$",
                                        "typeString": "tuple(uint256,uint256,)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1049,
                                          "name": "amountLeft",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 799,
                                          "src": "11331:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 1050,
                                          "name": "amountAmmBase",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 861,
                                          "src": "11343:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 1051,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 804,
                                            "src": "11358:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 1053,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 1052,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11367:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "11358:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 1054,
                                            "name": "reserves",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 804,
                                            "src": "11371:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          },
                                          "id": 1056,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "33",
                                            "id": 1055,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11380:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            },
                                            "value": "3"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "11371:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 1057,
                                          "name": "targetPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 794,
                                          "src": "11409:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 1058,
                                          "name": "baseDecimal",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1937,
                                          "src": "11422:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1047,
                                          "name": "OrderBookLibrary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6729,
                                          "src": "11285:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                            "typeString": "type(library OrderBookLibrary)"
                                          }
                                        },
                                        "id": 1048,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "getFixAmountForMovePriceDown",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 5904,
                                        "src": "11285:45:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256)"
                                        }
                                      },
                                      "id": 1059,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11285:149:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256,uint256)"
                                      }
                                    },
                                    "src": "11233:201:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 1061,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11233:201:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1065,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 796,
                                  "src": "11480:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1066,
                                  "name": "baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1939,
                                  "src": "11484:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1067,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "11495:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1068,
                                  "name": "amountAmmBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 861,
                                  "src": "11507:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1069,
                                  "name": "amountAmmQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 864,
                                  "src": "11522:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1064,
                                "name": "_ammSwapPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 493,
                                "src": "11466:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,address,uint256,uint256)"
                                }
                              },
                              "id": 1070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11466:71:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1071,
                            "nodeType": "ExpressionStatement",
                            "src": "11466:71:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 1080,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 1073,
                                      "name": "amountLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 799,
                                      "src": "11560:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 1074,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11574:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "11560:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1079,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 1076,
                                        "name": "getPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2430,
                                        "src": "11579:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                          "typeString": "function () view returns (uint256)"
                                        }
                                      },
                                      "id": 1077,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11579:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 1078,
                                      "name": "targetPrice",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 794,
                                      "src": "11593:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11579:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "11560:44:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "73656c6c20746f20746172676574206661696c6564",
                                  "id": 1081,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11606:23:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_5cb3e8ec5742bb0a45dc621143aa70f1745d3b6731500d812cf8713da6f4b9dc",
                                    "typeString": "literal_string \"sell to target failed\""
                                  },
                                  "value": "sell to target failed"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_5cb3e8ec5742bb0a45dc621143aa70f1745d3b6731500d812cf8713da6f4b9dc",
                                    "typeString": "literal_string \"sell to target failed\""
                                  }
                                ],
                                "id": 1072,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "11552:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 1082,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11552:78:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1083,
                            "nodeType": "ExpressionStatement",
                            "src": "11552:78:0"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 1087,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_movePriceDown",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 797,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 792,
                      "name": "amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1087,
                      "src": "8458:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 791,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8458:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 794,
                      "name": "targetPrice",
                      "nodeType": "VariableDeclaration",
                      "scope": 1087,
                      "src": "8485:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 793,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8485:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 796,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 1087,
                      "src": "8512:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 795,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8512:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "8447:76:0"
                },
                "returnParameters": {
                  "id": 800,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 799,
                      "name": "amountLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 1087,
                      "src": "8552:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 798,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8552:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "8551:17:0"
                },
                "scope": 1876,
                "src": "8424:3225:0",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 1198,
                  "nodeType": "Block",
                  "src": "11859:968:0",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1109,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1103,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1101,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1091,
                                "src": "11878:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1102,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11886:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11878:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1104,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1091,
                                  "src": "11891:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1105,
                                  "name": "priceStep",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1933,
                                  "src": "11899:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "11891:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11912:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11891:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "11878:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "507269636520496e76616c6964",
                            "id": 1110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11915:15:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_5c4045fa97340d5d5087a0b24116bff8dbc1bb1e2b311c259367b4cc4e4db233",
                              "typeString": "literal_string \"Price Invalid\""
                            },
                            "value": "Price Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_5c4045fa97340d5d5087a0b24116bff8dbc1bb1e2b311c259367b4cc4e4db233",
                              "typeString": "literal_string \"Price Invalid\""
                            }
                          ],
                          "id": 1100,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "11870:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11870:61:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1112,
                      "nodeType": "ExpressionStatement",
                      "src": "11870:61:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1116,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "11996:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1114,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "11950:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 1115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getUniswapV2OrderBookFactory",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5450,
                                "src": "11950:45:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address) view returns (address)"
                                }
                              },
                              "id": 1117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11950:54:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1118,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1929,
                              "src": "12008:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "11950:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f72646572426f6f6b20756e636f6e6e6563746564",
                            "id": 1120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12030:23:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_e01a2f582550f3471e938fb46a40e0287878d120fe3e81258ead7908c8b1f3ef",
                              "typeString": "literal_string \"OrderBook unconnected\""
                            },
                            "value": "OrderBook unconnected"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_e01a2f582550f3471e938fb46a40e0287878d120fe3e81258ead7908c8b1f3ef",
                              "typeString": "literal_string \"OrderBook unconnected\""
                            }
                          ],
                          "id": 1113,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "11942:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11942:112:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1122,
                      "nodeType": "ExpressionStatement",
                      "src": "11942:112:0"
                    },
                    {
                      "assignments": [
                        1124
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1124,
                          "name": "balance",
                          "nodeType": "VariableDeclaration",
                          "scope": 1198,
                          "src": "12130:12:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1123,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "12130:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1127,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1125,
                          "name": "_getQuoteBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2166,
                          "src": "12145:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12145:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12130:33:0"
                    },
                    {
                      "assignments": [
                        1129
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1129,
                          "name": "amountOffer",
                          "nodeType": "VariableDeclaration",
                          "scope": 1198,
                          "src": "12174:16:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1128,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "12174:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1138,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1130,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1124,
                            "src": "12193:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1131,
                            "name": "quoteBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1945,
                            "src": "12203:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12193:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12243:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 1137,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "12193:51:0",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1133,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1124,
                            "src": "12218:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1134,
                            "name": "quoteBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1945,
                            "src": "12228:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12218:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12174:70:0"
                    },
                    {
                      "assignments": [
                        1140
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1140,
                          "name": "minQuoteAmount",
                          "nodeType": "VariableDeclaration",
                          "scope": 1198,
                          "src": "12255:19:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1139,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "12255:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1147,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1143,
                            "name": "minAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1935,
                            "src": "12330:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1144,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1091,
                            "src": "12341:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1145,
                            "name": "baseDecimal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1937,
                            "src": "12348:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1141,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "12277:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 1142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getQuoteAmountWithBaseAmountAtPrice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5474,
                          "src": "12277:52:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12277:83:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12255:105:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1149,
                              "name": "amountOffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1129,
                              "src": "12379:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1150,
                              "name": "minQuoteAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1140,
                              "src": "12394:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12379:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "416d6f756e7420496e76616c6964",
                            "id": 1152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12410:16:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_43cf4608117882e02bbf2d67d2caafe055f6873b69ec4de9cf68010cfd544c80",
                              "typeString": "literal_string \"Amount Invalid\""
                            },
                            "value": "Amount Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_43cf4608117882e02bbf2d67d2caafe055f6873b69ec4de9cf68010cfd544c80",
                              "typeString": "literal_string \"Amount Invalid\""
                            }
                          ],
                          "id": 1148,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "12371:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12371:56:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1154,
                      "nodeType": "ExpressionStatement",
                      "src": "12371:56:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1159,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1089,
                            "src": "12466:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1156,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1931,
                                "src": "12455:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1155,
                              "name": "IUniswapV2Pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5069,
                              "src": "12440:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                "typeString": "type(contract IUniswapV2Pair)"
                              }
                            },
                            "id": 1157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12440:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                              "typeString": "contract IUniswapV2Pair"
                            }
                          },
                          "id": 1158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "skim",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5058,
                          "src": "12440:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                            "typeString": "function (address) external"
                          }
                        },
                        "id": 1160,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12440:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1161,
                      "nodeType": "ExpressionStatement",
                      "src": "12440:31:0"
                    },
                    {
                      "assignments": [
                        1163
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1163,
                          "name": "amountRemain",
                          "nodeType": "VariableDeclaration",
                          "scope": 1198,
                          "src": "12482:17:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1162,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "12482:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1169,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1165,
                            "name": "amountOffer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "12515:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1166,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1091,
                            "src": "12528:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1167,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1093,
                            "src": "12535:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1164,
                          "name": "_movePriceUp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 790,
                          "src": "12502:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,address) returns (uint256)"
                          }
                        },
                        "id": 1168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12502:36:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12482:56:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1170,
                          "name": "amountRemain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1163,
                          "src": "12553:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12569:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12553:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1194,
                      "nodeType": "IfStatement",
                      "src": "12549:216:0",
                      "trueBody": {
                        "id": 1193,
                        "nodeType": "Block",
                        "src": "12572:193:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1173,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1098,
                                "src": "12587:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1175,
                                    "name": "user",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1089,
                                    "src": "12612:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1176,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1093,
                                    "src": "12618:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1177,
                                    "name": "amountOffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1129,
                                    "src": "12622:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1178,
                                    "name": "amountRemain",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1163,
                                    "src": "12635:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1179,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1091,
                                    "src": "12649:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1180,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "12656:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1174,
                                  "name": "_addLimitOrder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2552,
                                  "src": "12597:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (address,address,uint256,uint256,uint256,uint256) returns (uint256)"
                                  }
                                },
                                "id": 1181,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12597:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "12587:79:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1183,
                            "nodeType": "ExpressionStatement",
                            "src": "12587:79:0"
                          },
                          {
                            "eventCall": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1185,
                                  "name": "user",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1089,
                                  "src": "12699:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1186,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1093,
                                  "src": "12705:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1187,
                                  "name": "amountOffer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1129,
                                  "src": "12709:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1188,
                                  "name": "amountRemain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1163,
                                  "src": "12722:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1189,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1091,
                                  "src": "12736:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1190,
                                  "name": "LIMIT_BUY",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4110,
                                  "src": "12743:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1184,
                                "name": "OrderCreated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1972,
                                "src": "12686:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "id": 1191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12686:67:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1192,
                            "nodeType": "EmitStatement",
                            "src": "12681:72:0"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1195,
                          "name": "_updateBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2192,
                          "src": "12803:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                            "typeString": "function ()"
                          }
                        },
                        "id": 1196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12803:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1197,
                      "nodeType": "ExpressionStatement",
                      "src": "12803:16:0"
                    }
                  ]
                },
                "documentation": null,
                "id": 1199,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 1096,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 1095,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "11826:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "11826:4:0"
                  }
                ],
                "name": "createBuyLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 1094,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1089,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 1199,
                      "src": "11751:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1088,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11751:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1091,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 1199,
                      "src": "11774:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1090,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11774:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1093,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 1199,
                      "src": "11795:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1092,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11795:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "11740:66:0"
                },
                "returnParameters": {
                  "id": 1099,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1098,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1199,
                      "src": "11845:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1097,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11845:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "11844:14:0"
                },
                "scope": 1876,
                "src": "11712:1115:0",
                "stateMutability": "nonpayable",
                "superFunction": 4491,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 1302,
                  "nodeType": "Block",
                  "src": "13037:850:0",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1222,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1213,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1203,
                                "src": "13056:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1214,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13064:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "13056:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1221,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1218,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 1216,
                                      "name": "price",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1203,
                                      "src": "13070:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "%",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 1217,
                                      "name": "priceStep",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1933,
                                      "src": "13078:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13070:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1219,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "13069:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1220,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13092:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "13069:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "13056:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "507269636520496e76616c6964",
                            "id": 1223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13095:15:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_5c4045fa97340d5d5087a0b24116bff8dbc1bb1e2b311c259367b4cc4e4db233",
                              "typeString": "literal_string \"Price Invalid\""
                            },
                            "value": "Price Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_5c4045fa97340d5d5087a0b24116bff8dbc1bb1e2b311c259367b4cc4e4db233",
                              "typeString": "literal_string \"Price Invalid\""
                            }
                          ],
                          "id": 1212,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "13048:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13048:63:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1225,
                      "nodeType": "ExpressionStatement",
                      "src": "13048:63:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1229,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "13176:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1227,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "13130:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 1228,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getUniswapV2OrderBookFactory",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5450,
                                "src": "13130:45:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address) view returns (address)"
                                }
                              },
                              "id": 1230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13130:54:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1231,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1929,
                              "src": "13188:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "13130:65:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f72646572426f6f6b20756e636f6e6e6563746564",
                            "id": 1233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13210:23:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_e01a2f582550f3471e938fb46a40e0287878d120fe3e81258ead7908c8b1f3ef",
                              "typeString": "literal_string \"OrderBook unconnected\""
                            },
                            "value": "OrderBook unconnected"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_e01a2f582550f3471e938fb46a40e0287878d120fe3e81258ead7908c8b1f3ef",
                              "typeString": "literal_string \"OrderBook unconnected\""
                            }
                          ],
                          "id": 1226,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "13122:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13122:112:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1235,
                      "nodeType": "ExpressionStatement",
                      "src": "13122:112:0"
                    },
                    {
                      "assignments": [
                        1237
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1237,
                          "name": "balance",
                          "nodeType": "VariableDeclaration",
                          "scope": 1302,
                          "src": "13310:12:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1236,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13310:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1240,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1238,
                          "name": "_getBaseBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2149,
                          "src": "13325:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13325:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13310:32:0"
                    },
                    {
                      "assignments": [
                        1242
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1242,
                          "name": "amountOffer",
                          "nodeType": "VariableDeclaration",
                          "scope": 1302,
                          "src": "13353:16:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1241,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13353:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1251,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1243,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1237,
                            "src": "13372:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1244,
                            "name": "baseBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1943,
                            "src": "13382:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13372:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13420:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 1250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "13372:49:0",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1246,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1237,
                            "src": "13396:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1247,
                            "name": "baseBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1943,
                            "src": "13406:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13396:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13353:68:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1253,
                              "name": "amountOffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1242,
                              "src": "13440:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1254,
                              "name": "minAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1935,
                              "src": "13455:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13440:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "416d6f756e7420496e76616c6964",
                            "id": 1256,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13466:16:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_43cf4608117882e02bbf2d67d2caafe055f6873b69ec4de9cf68010cfd544c80",
                              "typeString": "literal_string \"Amount Invalid\""
                            },
                            "value": "Amount Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_43cf4608117882e02bbf2d67d2caafe055f6873b69ec4de9cf68010cfd544c80",
                              "typeString": "literal_string \"Amount Invalid\""
                            }
                          ],
                          "id": 1252,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "13432:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13432:51:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1258,
                      "nodeType": "ExpressionStatement",
                      "src": "13432:51:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1263,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1201,
                            "src": "13522:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1260,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1931,
                                "src": "13511:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1259,
                              "name": "IUniswapV2Pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5069,
                              "src": "13496:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                "typeString": "type(contract IUniswapV2Pair)"
                              }
                            },
                            "id": 1261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13496:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                              "typeString": "contract IUniswapV2Pair"
                            }
                          },
                          "id": 1262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "skim",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5058,
                          "src": "13496:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                            "typeString": "function (address) external"
                          }
                        },
                        "id": 1264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13496:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1265,
                      "nodeType": "ExpressionStatement",
                      "src": "13496:31:0"
                    },
                    {
                      "assignments": [
                        1267
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1267,
                          "name": "amountRemain",
                          "nodeType": "VariableDeclaration",
                          "scope": 1302,
                          "src": "13538:17:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1266,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13538:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1273,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1269,
                            "name": "amountOffer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1242,
                            "src": "13573:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1270,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1203,
                            "src": "13586:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1271,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1205,
                            "src": "13593:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1268,
                          "name": "_movePriceDown",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1087,
                          "src": "13558:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,address) returns (uint256)"
                          }
                        },
                        "id": 1272,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13558:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13538:58:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1274,
                          "name": "amountRemain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1267,
                          "src": "13611:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13627:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13611:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1298,
                      "nodeType": "IfStatement",
                      "src": "13607:218:0",
                      "trueBody": {
                        "id": 1297,
                        "nodeType": "Block",
                        "src": "13630:195:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1277,
                                "name": "orderId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1210,
                                "src": "13645:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1279,
                                    "name": "user",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1201,
                                    "src": "13670:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1280,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1205,
                                    "src": "13676:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1281,
                                    "name": "amountOffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1242,
                                    "src": "13680:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1282,
                                    "name": "amountRemain",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1267,
                                    "src": "13693:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1283,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1203,
                                    "src": "13707:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1284,
                                    "name": "LIMIT_SELL",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4113,
                                    "src": "13714:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1278,
                                  "name": "_addLimitOrder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2552,
                                  "src": "13655:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (address,address,uint256,uint256,uint256,uint256) returns (uint256)"
                                  }
                                },
                                "id": 1285,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13655:70:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "13645:80:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1287,
                            "nodeType": "ExpressionStatement",
                            "src": "13645:80:0"
                          },
                          {
                            "eventCall": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1289,
                                  "name": "user",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1201,
                                  "src": "13758:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1290,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1205,
                                  "src": "13764:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1291,
                                  "name": "amountOffer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1242,
                                  "src": "13768:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1292,
                                  "name": "amountRemain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1267,
                                  "src": "13781:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1293,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1203,
                                  "src": "13795:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1294,
                                  "name": "LIMIT_SELL",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4113,
                                  "src": "13802:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1288,
                                "name": "OrderCreated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1972,
                                "src": "13745:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "id": 1295,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13745:68:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1296,
                            "nodeType": "EmitStatement",
                            "src": "13740:73:0"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1299,
                          "name": "_updateBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2192,
                          "src": "13863:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                            "typeString": "function ()"
                          }
                        },
                        "id": 1300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13863:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1301,
                      "nodeType": "ExpressionStatement",
                      "src": "13863:16:0"
                    }
                  ]
                },
                "documentation": null,
                "id": 1303,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 1208,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 1207,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "13004:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "13004:4:0"
                  }
                ],
                "name": "createSellLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 1206,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1201,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 1303,
                      "src": "12929:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1200,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12929:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1203,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 1303,
                      "src": "12952:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1202,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "12952:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1205,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 1303,
                      "src": "12973:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1204,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12973:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "12918:66:0"
                },
                "returnParameters": {
                  "id": 1211,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1210,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1303,
                      "src": "13023:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1209,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13023:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13022:14:0"
                },
                "scope": 1876,
                "src": "12889:998:0",
                "stateMutability": "nonpayable",
                "superFunction": 4502,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 1386,
                  "nodeType": "Block",
                  "src": "13949:596:0",
                  "statements": [
                    {
                      "assignments": [
                        1311
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1311,
                          "name": "o",
                          "nodeType": "VariableDeclaration",
                          "scope": 1386,
                          "src": "13960:14:0",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                            "typeString": "struct OrderBookBase.Order"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 1310,
                            "name": "Order",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 1915,
                            "src": "13960:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                              "typeString": "struct OrderBookBase.Order"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1315,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1312,
                          "name": "marketOrders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1953,
                          "src": "13977:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                            "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                          }
                        },
                        "id": 1314,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1313,
                          "name": "orderId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1305,
                          "src": "13990:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13977:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$1915_storage",
                          "typeString": "struct OrderBookBase.Order storage ref"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13960:38:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1321,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1317,
                                "name": "o",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1311,
                                "src": "14017:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 1318,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1900,
                              "src": "14017:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1319,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "14028:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1320,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "14028:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "14017:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f776e657220496e76616c6964",
                            "id": 1322,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14040:15:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_f1f3a60f81eb598d882ec98574d763f1b17d5b87eb44aa6f0c4bd1e4e33290ce",
                              "typeString": "literal_string \"Owner Invalid\""
                            },
                            "value": "Owner Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_f1f3a60f81eb598d882ec98574d763f1b17d5b87eb44aa6f0c4bd1e4e33290ce",
                              "typeString": "literal_string \"Owner Invalid\""
                            }
                          ],
                          "id": 1316,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "14009:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14009:47:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1324,
                      "nodeType": "ExpressionStatement",
                      "src": "14009:47:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1326,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1311,
                            "src": "14087:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          ],
                          "id": 1325,
                          "name": "_removeLimitOrder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2730,
                          "src": "14069:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Order_$1915_memory_ptr_$returns$__$",
                            "typeString": "function (struct OrderBookBase.Order memory)"
                          }
                        },
                        "id": 1327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14069:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1328,
                      "nodeType": "ExpressionStatement",
                      "src": "14069:20:0"
                    },
                    {
                      "assignments": [
                        1330
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1330,
                          "name": "token",
                          "nodeType": "VariableDeclaration",
                          "scope": 1386,
                          "src": "14120:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 1329,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14120:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1338,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1331,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14136:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1332,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1912,
                            "src": "14136:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1333,
                            "name": "LIMIT_BUY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4110,
                            "src": "14151:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14136:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "id": 1336,
                          "name": "baseToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1939,
                          "src": "14176:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "14136:49:0",
                        "trueExpression": {
                          "argumentTypes": null,
                          "id": 1335,
                          "name": "quoteToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1941,
                          "src": "14163:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "14120:65:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1340,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1330,
                            "src": "14212:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1341,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14219:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1342,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "to",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1902,
                            "src": "14219:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1343,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14225:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1344,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amountRemain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1910,
                            "src": "14225:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1339,
                          "name": "_singleTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2347,
                          "src": "14196:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 1345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14196:44:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1346,
                      "nodeType": "ExpressionStatement",
                      "src": "14196:44:0"
                    },
                    {
                      "assignments": [
                        1348
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1348,
                          "name": "balance",
                          "nodeType": "VariableDeclaration",
                          "scope": 1386,
                          "src": "14285:12:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1347,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "14285:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1357,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1354,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7337,
                                "src": "14332:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_OrderBook_$1876",
                                  "typeString": "contract OrderBook"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_OrderBook_$1876",
                                  "typeString": "contract OrderBook"
                                }
                              ],
                              "id": 1353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14324:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14324:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1350,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1330,
                                "src": "14307:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1349,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4465,
                              "src": "14300:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 1351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14300:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$4465",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 1352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4426,
                          "src": "14300:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 1356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14300:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "14285:53:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1358,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1311,
                            "src": "14353:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 1359,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "orderType",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1912,
                          "src": "14353:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1360,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4110,
                          "src": "14368:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14353:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1366,
                            "name": "baseBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1943,
                            "src": "14417:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1367,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1348,
                            "src": "14431:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14417:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1369,
                        "nodeType": "ExpressionStatement",
                        "src": "14417:21:0"
                      },
                      "id": 1370,
                      "nodeType": "IfStatement",
                      "src": "14349:89:0",
                      "trueBody": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1362,
                            "name": "quoteBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1945,
                            "src": "14379:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1363,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1348,
                            "src": "14394:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14379:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1365,
                        "nodeType": "ExpressionStatement",
                        "src": "14379:22:0"
                      }
                    },
                    {
                      "eventCall": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1372,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14470:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1373,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1900,
                            "src": "14470:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1374,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14479:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1375,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "to",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1902,
                            "src": "14479:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1376,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14485:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1377,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amountOffer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1908,
                            "src": "14485:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1378,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14500:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1379,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amountRemain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1910,
                            "src": "14500:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1380,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14516:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1381,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "price",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1906,
                            "src": "14516:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1382,
                              "name": "o",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1311,
                              "src": "14525:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 1383,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1912,
                            "src": "14525:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1371,
                          "name": "OrderCanceled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2014,
                          "src": "14456:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                          }
                        },
                        "id": 1384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14456:81:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1385,
                      "nodeType": "EmitStatement",
                      "src": "14451:86:0"
                    }
                  ]
                },
                "documentation": null,
                "id": 1387,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 1308,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 1307,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "13944:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "13944:4:0"
                  }
                ],
                "name": "cancelLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 1306,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1305,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1387,
                      "src": "13921:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1304,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13921:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13920:14:0"
                },
                "returnParameters": {
                  "id": 1309,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "13949:0:0"
                },
                "scope": 1876,
                "src": "13895:650:0",
                "stateMutability": "nonpayable",
                "superFunction": 4507,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 1540,
                  "nodeType": "Block",
                  "src": "15021:1714:0",
                  "statements": [
                    {
                      "assignments": [
                        1401,
                        1403
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1401,
                          "name": "reserveBase",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15033:16:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1400,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15033:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 1403,
                          "name": "reserveQuote",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15051:17:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1402,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15051:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1410,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1406,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1931,
                            "src": "15101:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1407,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1939,
                            "src": "15107:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1408,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "15118:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1404,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "15072:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 1405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getReserves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5682,
                          "src": "15072:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                            "typeString": "function (address,address,address) view returns (uint112,uint112)"
                          }
                        },
                        "id": 1409,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15072:57:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                          "typeString": "tuple(uint112,uint112)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "15032:97:0"
                    },
                    {
                      "assignments": [
                        1412
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1412,
                          "name": "tradeDir",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15140:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1411,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15140:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1416,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1414,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1389,
                            "src": "15171:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1413,
                          "name": "tradeDirection",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2461,
                          "src": "15156:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 1415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15156:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "15140:39:0"
                    },
                    {
                      "assignments": [
                        1418
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1418,
                          "name": "orderDir",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15190:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1417,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15190:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1423,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1421,
                            "name": "tradeDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1412,
                            "src": "15244:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1419,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "15206:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 1420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getOppositeDirection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5410,
                          "src": "15206:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15206:47:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "15190:63:0"
                    },
                    {
                      "assignments": [
                        1425
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1425,
                          "name": "amountInLeft",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15301:17:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1424,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15301:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1427,
                      "initialValue": {
                        "argumentTypes": null,
                        "id": 1426,
                        "name": "amountInOffer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1391,
                        "src": "15321:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "15301:33:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 1430,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 1428,
                          "name": "amountOutGet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1394,
                          "src": "15345:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15360:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15345:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1431,
                      "nodeType": "ExpressionStatement",
                      "src": "15345:16:0"
                    },
                    {
                      "assignments": [
                        1433,
                        1435
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1433,
                          "name": "price",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15373:10:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1432,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15373:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 1435,
                          "name": "amount",
                          "nodeType": "VariableDeclaration",
                          "scope": 1540,
                          "src": "15385:11:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1434,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15385:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1440,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1437,
                            "name": "orderDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1418,
                            "src": "15409:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15419:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1436,
                          "name": "nextBook",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "15400:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                          }
                        },
                        "id": 1439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15400:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "15372:49:0"
                    },
                    {
                      "body": {
                        "id": 1514,
                        "nodeType": "Block",
                        "src": "15451:999:0",
                        "statements": [
                          {
                            "assignments": [
                              1445
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1445,
                                "name": "amountAmmLeft",
                                "nodeType": "VariableDeclaration",
                                "scope": 1514,
                                "src": "15541:18:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1444,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15541:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 1446,
                            "initialValue": null,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "15541:18:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1447,
                                    "name": "amountAmmLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1445,
                                    "src": "15575:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  null,
                                  null,
                                  {
                                    "argumentTypes": null,
                                    "id": 1448,
                                    "name": "nextReserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1396,
                                    "src": "15592:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1449,
                                    "name": "nextReserveQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1398,
                                    "src": "15609:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1450,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "15574:52:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$__$__$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,,,uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1453,
                                    "name": "tradeDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1412,
                                    "src": "15685:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1454,
                                    "name": "amountInLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1425,
                                    "src": "15695:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1455,
                                    "name": "reserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1401,
                                    "src": "15709:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1456,
                                    "name": "reserveQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1403,
                                    "src": "15722:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1457,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1433,
                                    "src": "15736:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1458,
                                    "name": "baseDecimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1937,
                                    "src": "15764:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1451,
                                    "name": "OrderBookLibrary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6729,
                                    "src": "15646:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                      "typeString": "type(library OrderBookLibrary)"
                                    }
                                  },
                                  "id": 1452,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getAmountForMovePrice",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6177,
                                  "src": "15646:38:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 1459,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15646:130:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "src": "15574:202:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1461,
                            "nodeType": "ExpressionStatement",
                            "src": "15574:202:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1462,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1445,
                                "src": "15795:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1463,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15812:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "15795:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1467,
                            "nodeType": "IfStatement",
                            "src": "15791:64:0",
                            "trueBody": {
                              "id": 1466,
                              "nodeType": "Block",
                              "src": "15815:40:0",
                              "statements": [
                                {
                                  "id": 1465,
                                  "nodeType": "Break",
                                  "src": "15834:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              1469,
                              1471,
                              1473
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1469,
                                "name": "amountInForTake",
                                "nodeType": "VariableDeclaration",
                                "scope": 1514,
                                "src": "15947:20:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1468,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15947:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 1471,
                                "name": "amountOutWithFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 1514,
                                "src": "15969:21:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1470,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15969:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 1473,
                                "name": "communityFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 1514,
                                "src": "15992:17:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1472,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15992:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 1484,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1476,
                                  "name": "tradeDir",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1412,
                                  "src": "16073:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1477,
                                  "name": "amountAmmLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1445,
                                  "src": "16083:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1478,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1433,
                                  "src": "16098:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1479,
                                  "name": "baseDecimal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1937,
                                  "src": "16105:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1480,
                                  "name": "protocolFeeRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1947,
                                  "src": "16118:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1481,
                                  "name": "subsidyFeeRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1949,
                                  "src": "16135:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1482,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1435,
                                  "src": "16151:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1474,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "16013:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 1475,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAmountOutForTakePrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6577,
                                "src": "16013:41:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256)"
                                }
                              },
                              "id": 1483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16013:145:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "15946:212:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1485,
                                "name": "amountOutGet",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1394,
                                "src": "16173:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1488,
                                    "name": "communityFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1473,
                                    "src": "16210:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1486,
                                    "name": "amountOutWithFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1471,
                                    "src": "16189:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1487,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "16189:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1489,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16189:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16173:50:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1491,
                            "nodeType": "ExpressionStatement",
                            "src": "16173:50:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1492,
                                "name": "amountInLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1425,
                                "src": "16238:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1495,
                                    "name": "amountInForTake",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1469,
                                    "src": "16270:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1493,
                                    "name": "amountInLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1425,
                                    "src": "16253:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1494,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "16253:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16253:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16238:48:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1498,
                            "nodeType": "ExpressionStatement",
                            "src": "16238:48:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1499,
                                "name": "amountInForTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1469,
                                "src": "16305:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1500,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1445,
                                "src": "16324:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16305:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1504,
                            "nodeType": "IfStatement",
                            "src": "16301:78:0",
                            "trueBody": {
                              "id": 1503,
                              "nodeType": "Block",
                              "src": "16339:40:0",
                              "statements": [
                                {
                                  "id": 1502,
                                  "nodeType": "Break",
                                  "src": "16358:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1505,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1433,
                                    "src": "16396:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1506,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1435,
                                    "src": "16403:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1507,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "16395:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1509,
                                    "name": "orderDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1418,
                                    "src": "16422:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1510,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1433,
                                    "src": "16432:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1508,
                                  "name": "nextBook",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3247,
                                  "src": "16413:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                                  }
                                },
                                "id": 1511,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16413:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "16395:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1513,
                            "nodeType": "ExpressionStatement",
                            "src": "16395:43:0"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1441,
                          "name": "price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1433,
                          "src": "15439:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15448:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15439:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 1515,
                      "nodeType": "WhileStatement",
                      "src": "15432:1018:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1516,
                          "name": "amountInLeft",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1425,
                          "src": "16466:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16481:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "16466:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1539,
                      "nodeType": "IfStatement",
                      "src": "16462:266:0",
                      "trueBody": {
                        "id": 1538,
                        "nodeType": "Block",
                        "src": "16484:244:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1519,
                                "name": "amountOutGet",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1394,
                                "src": "16499:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1522,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1520,
                                    "name": "tradeDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1412,
                                    "src": "16515:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1521,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "16527:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16515:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1531,
                                      "name": "amountInLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1425,
                                      "src": "16676:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1532,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1401,
                                      "src": "16690:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1533,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1403,
                                      "src": "16703:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1529,
                                      "name": "OrderBookLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6729,
                                      "src": "16646:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                        "typeString": "type(library OrderBookLibrary)"
                                      }
                                    },
                                    "id": 1530,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getAmountOut",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5558,
                                    "src": "16646:29:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16646:70:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1535,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "16515:201:0",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1525,
                                      "name": "amountInLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1425,
                                      "src": "16586:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1526,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1403,
                                      "src": "16600:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1527,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1401,
                                      "src": "16614:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1523,
                                      "name": "OrderBookLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6729,
                                      "src": "16556:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                        "typeString": "type(library OrderBookLibrary)"
                                      }
                                    },
                                    "id": 1524,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getAmountOut",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5558,
                                    "src": "16556:29:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16556:70:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16499:217:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1537,
                            "nodeType": "ExpressionStatement",
                            "src": "16499:217:0"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": "*****************************************************************************************************\ncalled by uniswap v2 pair and router******************************************************************************************************",
                "id": 1541,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountOutForMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 1392,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1389,
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 1541,
                      "src": "14882:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1388,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14882:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1391,
                      "name": "amountInOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1541,
                      "src": "14899:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1390,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14899:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "14881:37:0"
                },
                "returnParameters": {
                  "id": 1399,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1394,
                      "name": "amountOutGet",
                      "nodeType": "VariableDeclaration",
                      "scope": 1541,
                      "src": "14957:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1393,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14957:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1396,
                      "name": "nextReserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 1541,
                      "src": "14976:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1395,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14976:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1398,
                      "name": "nextReserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 1541,
                      "src": "14998:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1397,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14998:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "14956:64:0"
                },
                "scope": 1876,
                "src": "14848:1887:0",
                "stateMutability": "view",
                "superFunction": 4648,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 1697,
                  "nodeType": "Block",
                  "src": "16916:1744:0",
                  "statements": [
                    {
                      "assignments": [
                        1555,
                        1557
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1555,
                          "name": "reserveBase",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "16928:16:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1554,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "16928:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 1557,
                          "name": "reserveQuote",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "16946:17:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1556,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "16946:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1564,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1560,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1931,
                            "src": "16996:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1561,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1939,
                            "src": "17002:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1562,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "17013:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1558,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "16967:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 1559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getReserves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5682,
                          "src": "16967:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                            "typeString": "function (address,address,address) view returns (uint112,uint112)"
                          }
                        },
                        "id": 1563,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16967:57:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                          "typeString": "tuple(uint112,uint112)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "16927:97:0"
                    },
                    {
                      "assignments": [
                        1566
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1566,
                          "name": "orderDir",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "17035:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1565,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "17035:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1570,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1568,
                            "name": "tokenOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1543,
                            "src": "17066:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1567,
                          "name": "tradeDirection",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2461,
                          "src": "17051:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 1569,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17051:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "17035:40:0"
                    },
                    {
                      "assignments": [
                        1572
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1572,
                          "name": "tradeDir",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "17123:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1571,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "17123:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1577,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1575,
                            "name": "orderDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1566,
                            "src": "17177:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1573,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "17139:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 1574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getOppositeDirection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5410,
                          "src": "17139:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1576,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17139:47:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "17123:63:0"
                    },
                    {
                      "assignments": [
                        1579
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1579,
                          "name": "amountOutLeft",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "17197:18:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1578,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "17197:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1581,
                      "initialValue": {
                        "argumentTypes": null,
                        "id": 1580,
                        "name": "amountOutOffer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1545,
                        "src": "17218:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "17197:35:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 1584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 1582,
                          "name": "amountInGet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1548,
                          "src": "17243:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17257:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17243:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1585,
                      "nodeType": "ExpressionStatement",
                      "src": "17243:15:0"
                    },
                    {
                      "assignments": [
                        1587,
                        1589
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1587,
                          "name": "price",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "17270:10:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1586,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "17270:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 1589,
                          "name": "amount",
                          "nodeType": "VariableDeclaration",
                          "scope": 1697,
                          "src": "17282:11:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1588,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "17282:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1594,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1591,
                            "name": "orderDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1566,
                            "src": "17306:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17316:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1590,
                          "name": "nextBook",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "17297:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                          }
                        },
                        "id": 1593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17297:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "17269:49:0"
                    },
                    {
                      "body": {
                        "id": 1671,
                        "nodeType": "Block",
                        "src": "17348:1027:0",
                        "statements": [
                          {
                            "assignments": [
                              1599
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1599,
                                "name": "amountAmmLeft",
                                "nodeType": "VariableDeclaration",
                                "scope": 1671,
                                "src": "17438:18:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1598,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "17438:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 1600,
                            "initialValue": null,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "17438:18:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1601,
                                    "name": "amountAmmLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1599,
                                    "src": "17472:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  null,
                                  null,
                                  {
                                    "argumentTypes": null,
                                    "id": 1602,
                                    "name": "nextReserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1550,
                                    "src": "17489:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1603,
                                    "name": "nextReserveQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1552,
                                    "src": "17506:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1604,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "17471:52:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$__$__$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,,,uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1607,
                                    "name": "tradeDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1572,
                                    "src": "17591:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1608,
                                    "name": "amountOutLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1579,
                                    "src": "17601:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1609,
                                    "name": "reserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1555,
                                    "src": "17616:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1610,
                                    "name": "reserveQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1557,
                                    "src": "17629:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1611,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1587,
                                    "src": "17660:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1612,
                                    "name": "baseDecimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1937,
                                    "src": "17667:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1605,
                                    "name": "OrderBookLibrary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6729,
                                    "src": "17539:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                      "typeString": "type(library OrderBookLibrary)"
                                    }
                                  },
                                  "id": 1606,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "getAmountForMovePriceWithAmountOut",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6378,
                                  "src": "17539:51:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 1613,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17539:140:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "src": "17471:208:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1615,
                            "nodeType": "ExpressionStatement",
                            "src": "17471:208:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1616,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1599,
                                "src": "17698:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1617,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17715:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "17698:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1621,
                            "nodeType": "IfStatement",
                            "src": "17694:64:0",
                            "trueBody": {
                              "id": 1620,
                              "nodeType": "Block",
                              "src": "17718:40:0",
                              "statements": [
                                {
                                  "id": 1619,
                                  "nodeType": "Break",
                                  "src": "17737:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              1623,
                              1625,
                              1627
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1623,
                                "name": "amountInForTake",
                                "nodeType": "VariableDeclaration",
                                "scope": 1671,
                                "src": "17851:20:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1622,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "17851:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 1625,
                                "name": "amountOutWithFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 1671,
                                "src": "17873:21:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1624,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "17873:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 1627,
                                "name": "communityFee",
                                "nodeType": "VariableDeclaration",
                                "scope": 1671,
                                "src": "17896:17:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1626,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "17896:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 1638,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1630,
                                  "name": "tradeDir",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1572,
                                  "src": "17972:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1631,
                                  "name": "amountAmmLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1599,
                                  "src": "17999:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1632,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1587,
                                  "src": "18014:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1633,
                                  "name": "baseDecimal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1937,
                                  "src": "18021:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1634,
                                  "name": "protocolFeeRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1947,
                                  "src": "18034:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1635,
                                  "name": "subsidyFeeRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1949,
                                  "src": "18051:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1636,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1589,
                                  "src": "18067:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1628,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "17917:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 1629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAmountInForTakePrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6728,
                                "src": "17917:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256)"
                                }
                              },
                              "id": 1637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17917:157:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "17850:224:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1644,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1639,
                                "name": "amountInGet",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1548,
                                "src": "18089:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 1642,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18124:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1640,
                                    "name": "amountInForTake",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1623,
                                    "src": "18104:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1641,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6753,
                                  "src": "18104:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18104:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18089:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1645,
                            "nodeType": "ExpressionStatement",
                            "src": "18089:37:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1654,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1646,
                                "name": "amountOutLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1579,
                                "src": "18141:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1651,
                                        "name": "communityFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1627,
                                        "src": "18196:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1649,
                                        "name": "amountOutWithFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1625,
                                        "src": "18175:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1650,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sub",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6775,
                                      "src": "18175:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1652,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "18175:34:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1647,
                                    "name": "amountOutLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1579,
                                    "src": "18157:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1648,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "18157:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18157:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18141:69:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1655,
                            "nodeType": "ExpressionStatement",
                            "src": "18141:69:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1658,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1656,
                                "name": "amountOutWithFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1625,
                                "src": "18229:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1657,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1599,
                                "src": "18249:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18229:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1661,
                            "nodeType": "IfStatement",
                            "src": "18225:79:0",
                            "trueBody": {
                              "id": 1660,
                              "nodeType": "Block",
                              "src": "18264:40:0",
                              "statements": [
                                {
                                  "id": 1659,
                                  "nodeType": "Break",
                                  "src": "18283:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1662,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1587,
                                    "src": "18321:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1663,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1589,
                                    "src": "18328:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1664,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "18320:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1666,
                                    "name": "orderDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1566,
                                    "src": "18347:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1667,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1587,
                                    "src": "18357:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1665,
                                  "name": "nextBook",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3247,
                                  "src": "18338:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                                  }
                                },
                                "id": 1668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18338:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "18320:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1670,
                            "nodeType": "ExpressionStatement",
                            "src": "18320:43:0"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1595,
                          "name": "price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1587,
                          "src": "17336:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17345:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17336:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 1672,
                      "nodeType": "WhileStatement",
                      "src": "17329:1046:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1673,
                          "name": "amountOutLeft",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1579,
                          "src": "18391:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18407:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "18391:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1696,
                      "nodeType": "IfStatement",
                      "src": "18387:266:0",
                      "trueBody": {
                        "id": 1695,
                        "nodeType": "Block",
                        "src": "18410:243:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1676,
                                "name": "amountInGet",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1548,
                                "src": "18425:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1679,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1677,
                                    "name": "tradeDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1572,
                                    "src": "18440:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1678,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "18452:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18440:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1688,
                                      "name": "amountOutLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1579,
                                      "src": "18600:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1689,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1555,
                                      "src": "18615:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1690,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1557,
                                      "src": "18628:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1686,
                                      "name": "OrderBookLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6729,
                                      "src": "18571:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                        "typeString": "type(library OrderBookLibrary)"
                                      }
                                    },
                                    "id": 1687,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getAmountIn",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5618,
                                    "src": "18571:28:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1691,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "18571:70:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1692,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "18440:201:0",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1682,
                                      "name": "amountOutLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1579,
                                      "src": "18510:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1683,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1557,
                                      "src": "18525:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1684,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1555,
                                      "src": "18539:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1680,
                                      "name": "OrderBookLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6729,
                                      "src": "18481:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                        "typeString": "type(library OrderBookLibrary)"
                                      }
                                    },
                                    "id": 1681,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getAmountIn",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5618,
                                    "src": "18481:28:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1685,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "18481:70:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18425:216:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1694,
                            "nodeType": "ExpressionStatement",
                            "src": "18425:216:0"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 1698,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountInForMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 1546,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1543,
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "16776:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1542,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "16776:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1545,
                      "name": "amountOutOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "16794:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1544,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16794:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "16775:39:0"
                },
                "returnParameters": {
                  "id": 1553,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1548,
                      "name": "amountInGet",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "16853:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1547,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16853:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1550,
                      "name": "nextReserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "16871:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1549,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16871:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1552,
                      "name": "nextReserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 1698,
                      "src": "16893:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1551,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16893:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "16852:63:0"
                },
                "scope": 1876,
                "src": "16743:1917:0",
                "stateMutability": "view",
                "superFunction": 4661,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 1874,
                  "nodeType": "Block",
                  "src": "18852:1932:0",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1718,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "18938:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "18938:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1720,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1931,
                              "src": "18952:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "18938:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "696e76616c69642073656e646572",
                            "id": 1722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18958:16:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_175ad23f068aed3ab88ee19620d541e9ae3d91161407ed4bb90c97cce31b0783",
                              "typeString": "literal_string \"invalid sender\""
                            },
                            "value": "invalid sender"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_175ad23f068aed3ab88ee19620d541e9ae3d91161407ed4bb90c97cce31b0783",
                              "typeString": "literal_string \"invalid sender\""
                            }
                          ],
                          "id": 1717,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "18930:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 1723,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18930:45:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1724,
                      "nodeType": "ExpressionStatement",
                      "src": "18930:45:0"
                    },
                    {
                      "assignments": [
                        1728
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1728,
                          "name": "reserves",
                          "nodeType": "VariableDeclaration",
                          "scope": 1874,
                          "src": "18986:22:0",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 1726,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "18986:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1727,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "18986:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1734,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 1732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19022: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": 1731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "19011:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                            "typeString": "function (uint256) pure returns (uint256[] memory)"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 1729,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "19015:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1730,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "19015:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          }
                        },
                        "id": 1733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19011:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "18986:38:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 1748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1735,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1728,
                                "src": "19065:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 1737,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1736,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19074: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": "19065:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1738,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1728,
                                "src": "19078:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 1740,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 1739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19087: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": "19078:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 1741,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "19064:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1744,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1931,
                              "src": "19122:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1745,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1939,
                              "src": "19128:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1746,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "19139:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1742,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "19093:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 1743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5682,
                            "src": "19093:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                              "typeString": "function (address,address,address) view returns (uint112,uint112)"
                            }
                          },
                          "id": 1747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19093:57:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "src": "19064:86:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1749,
                      "nodeType": "ExpressionStatement",
                      "src": "19064:86:0"
                    },
                    {
                      "assignments": [
                        1751
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1751,
                          "name": "tradeDir",
                          "nodeType": "VariableDeclaration",
                          "scope": 1874,
                          "src": "19210:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1750,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "19210:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1755,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1753,
                            "name": "tokenIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1700,
                            "src": "19241:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1752,
                          "name": "tradeDirection",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2461,
                          "src": "19226:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 1754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19226:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "19210:39:0"
                    },
                    {
                      "assignments": [
                        1757
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1757,
                          "name": "orderDir",
                          "nodeType": "VariableDeclaration",
                          "scope": 1874,
                          "src": "19260:13:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1756,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "19260:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1762,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1760,
                            "name": "tradeDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1751,
                            "src": "19314:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1758,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "19276:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 1759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getOppositeDirection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5410,
                          "src": "19276:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19276:47:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "19260:63:0"
                    },
                    {
                      "assignments": [
                        1764,
                        1766
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 1764,
                          "name": "price",
                          "nodeType": "VariableDeclaration",
                          "scope": 1874,
                          "src": "19337:10:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1763,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "19337:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 1766,
                          "name": "amount",
                          "nodeType": "VariableDeclaration",
                          "scope": 1874,
                          "src": "19349:11:0",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 1765,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "19349:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 1771,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1768,
                            "name": "orderDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1757,
                            "src": "19373:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19383:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1767,
                          "name": "nextBook",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "19364:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                          }
                        },
                        "id": 1770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19364:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "19336:49:0"
                    },
                    {
                      "body": {
                        "id": 1837,
                        "nodeType": "Block",
                        "src": "19559:899:0",
                        "statements": [
                          {
                            "assignments": [
                              1776,
                              null,
                              null,
                              null,
                              null
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1776,
                                "name": "amountAmmLeft",
                                "nodeType": "VariableDeclaration",
                                "scope": 1837,
                                "src": "19642:18:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1775,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "19642:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              null,
                              null,
                              null,
                              null
                            ],
                            "id": 1790,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1779,
                                  "name": "tradeDir",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1751,
                                  "src": "19738:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1780,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1702,
                                  "src": "19765:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1781,
                                    "name": "reserves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1728,
                                    "src": "19792:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1783,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1782,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19801:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19792:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1784,
                                    "name": "reserves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1728,
                                    "src": "19822:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1786,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 1785,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19831:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19822:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1787,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1764,
                                  "src": "19852:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 1788,
                                  "name": "baseDecimal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1937,
                                  "src": "19876:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1777,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "19681:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 1778,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAmountForMovePrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6177,
                                "src": "19681:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256,uint256,uint256,uint256)"
                                }
                              },
                              "id": 1789,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19681:207:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "19641:247:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1793,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1791,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1776,
                                "src": "19907:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1792,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19924:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "19907:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1796,
                            "nodeType": "IfStatement",
                            "src": "19903:64:0",
                            "trueBody": {
                              "id": 1795,
                              "nodeType": "Block",
                              "src": "19927:40:0",
                              "statements": [
                                {
                                  "id": 1794,
                                  "nodeType": "Break",
                                  "src": "19946:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              1798
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1798,
                                "name": "amountInForTake",
                                "nodeType": "VariableDeclaration",
                                "scope": 1837,
                                "src": "20067:20:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1797,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "20067:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 1799,
                            "initialValue": null,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "20067:20:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1800,
                                    "name": "amountInForTake",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1798,
                                    "src": "20103:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  null,
                                  {
                                    "argumentTypes": null,
                                    "id": 1801,
                                    "name": "accounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1712,
                                    "src": "20121:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1802,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1715,
                                    "src": "20131:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  }
                                ],
                                "id": 1803,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "20102:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$__$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "tuple(uint256,,address[] memory,uint256[] memory)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1805,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1704,
                                    "src": "20176:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1806,
                                    "name": "tradeDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1751,
                                    "src": "20180:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1807,
                                    "name": "amountAmmLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1776,
                                    "src": "20190:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1808,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1764,
                                    "src": "20205:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1809,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1766,
                                    "src": "20212:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1810,
                                    "name": "accounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1712,
                                    "src": "20220:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1811,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1715,
                                    "src": "20230:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  ],
                                  "id": 1804,
                                  "name": "_getAmountAndPay",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 388,
                                  "src": "20159:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                    "typeString": "function (address,uint256,uint256,uint256,uint256,address[] memory,uint256[] memory) returns (uint256,uint256,address[] memory,uint256[] memory)"
                                  }
                                },
                                "id": 1812,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20159:79:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "tuple(uint256,uint256,address[] memory,uint256[] memory)"
                                }
                              },
                              "src": "20102:136:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1814,
                            "nodeType": "ExpressionStatement",
                            "src": "20102:136:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1815,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1702,
                                "src": "20253:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1818,
                                    "name": "amountInForTake",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1798,
                                    "src": "20277:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1816,
                                    "name": "amountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1702,
                                    "src": "20264:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1817,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "20264:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1819,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20264:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "20253:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1821,
                            "nodeType": "ExpressionStatement",
                            "src": "20253:40:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1824,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1822,
                                "name": "amountInForTake",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1798,
                                "src": "20312:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1823,
                                "name": "amountAmmLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1776,
                                "src": "20331:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "20312:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 1827,
                            "nodeType": "IfStatement",
                            "src": "20308:78:0",
                            "trueBody": {
                              "id": 1826,
                              "nodeType": "Block",
                              "src": "20346:40:0",
                              "statements": [
                                {
                                  "id": 1825,
                                  "nodeType": "Break",
                                  "src": "20365:5:0"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1835,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1828,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1764,
                                    "src": "20403:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1829,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1766,
                                    "src": "20410:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 1830,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "20402:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1832,
                                    "name": "orderDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1757,
                                    "src": "20430:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1833,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1764,
                                    "src": "20440:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1831,
                                  "name": "nextBook2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3273,
                                  "src": "20420:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                                  }
                                },
                                "id": 1834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20420:26:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "20402:44:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1836,
                            "nodeType": "ExpressionStatement",
                            "src": "20402:44:0"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1774,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1772,
                          "name": "price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1764,
                          "src": "19547:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19556:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "19547:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 1838,
                      "nodeType": "WhileStatement",
                      "src": "19540:918:0"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1839,
                          "name": "_updateBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2192,
                          "src": "20495:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                            "typeString": "function ()"
                          }
                        },
                        "id": 1840,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20495:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 1841,
                      "nodeType": "ExpressionStatement",
                      "src": "20495:16:0"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1844,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1842,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1702,
                          "src": "20528:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20539:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "20528:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 1873,
                      "nodeType": "IfStatement",
                      "src": "20524:253:0",
                      "trueBody": {
                        "id": 1872,
                        "nodeType": "Block",
                        "src": "20542:235:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1870,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1845,
                                "name": "amountOutLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1709,
                                "src": "20557:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1848,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1846,
                                    "name": "tradeDir",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1751,
                                    "src": "20574:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1847,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "20586:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "20574:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1861,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1702,
                                      "src": "20730:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1862,
                                        "name": "reserves",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1728,
                                        "src": "20740:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 1864,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1863,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "20749:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "20740:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1865,
                                        "name": "reserves",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1728,
                                        "src": "20753:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 1867,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 1866,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "20762:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "20753:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1859,
                                      "name": "OrderBookLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6729,
                                      "src": "20700:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                        "typeString": "type(library OrderBookLibrary)"
                                      }
                                    },
                                    "id": 1860,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getAmountOut",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5558,
                                    "src": "20700:29:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "20700:65:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1869,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "20574:191:0",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1851,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1702,
                                      "src": "20645:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1852,
                                        "name": "reserves",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1728,
                                        "src": "20655:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 1854,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 1853,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "20664:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "20655:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1855,
                                        "name": "reserves",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1728,
                                        "src": "20668:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 1857,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1856,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "20677:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "20668:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1849,
                                      "name": "OrderBookLibrary",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6729,
                                      "src": "20615:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                        "typeString": "type(library OrderBookLibrary)"
                                      }
                                    },
                                    "id": 1850,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getAmountOut",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5558,
                                    "src": "20615:29:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1858,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "20615:65:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "20557:208:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1871,
                            "nodeType": "ExpressionStatement",
                            "src": "20557:208:0"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 1875,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 1707,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 1706,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "18763:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "18763:4:0"
                  }
                ],
                "name": "takeOrderWhenMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 1705,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1700,
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 1875,
                      "src": "18700:15:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1699,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18700:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1702,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 1875,
                      "src": "18717:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1701,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18717:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1704,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 1875,
                      "src": "18732:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1703,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18732:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "18699:44:0"
                },
                "returnParameters": {
                  "id": 1716,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1709,
                      "name": "amountOutLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 1875,
                      "src": "18782:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1708,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18782:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1712,
                      "name": "accounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 1875,
                      "src": "18802:25:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1710,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18802:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1711,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "18802:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1715,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 1875,
                      "src": "18829:21:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1713,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "18829:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1714,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "18829:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "18781:70:0"
                },
                "scope": 1876,
                "src": "18668:2116:0",
                "stateMutability": "nonpayable",
                "superFunction": 4678,
                "visibility": "external"
              }
            ],
            "scope": 1877,
            "src": "134:20653:0"
          }
        ],
        "src": "0:20789:0"
      }
    },
    "contracts/OrderBookBase.sol": {
      "id": 1,
      "AST": {
        "absolutePath": "contracts/OrderBookBase.sol",
        "exportedSymbols": {
          "OrderBookBase": [
            3554
          ]
        },
        "id": 3555,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 1878,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:1"
          },
          {
            "absolutePath": "contracts/interfaces/IERC20.sol",
            "file": "./interfaces/IERC20.sol",
            "id": 1879,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 4466,
            "src": "28:33:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/libraries/UQ112x112.sol",
            "file": "./libraries/UQ112x112.sol",
            "id": 1880,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 7037,
            "src": "63:35:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/interfaces/IWETH.sol",
            "file": "./interfaces/IWETH.sol",
            "id": 1881,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 5090,
            "src": "100:32:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/libraries/TransferHelper.sol",
            "file": "./libraries/TransferHelper.sol",
            "id": 1882,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 6977,
            "src": "134:40:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/libraries/OrderBookLibrary.sol",
            "file": "./libraries/OrderBookLibrary.sol",
            "id": 1883,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 6730,
            "src": "176:42:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/OrderQueue.sol",
            "file": "./OrderQueue.sol",
            "id": 1884,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 4106,
            "src": "220:26:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/PriceList.sol",
            "file": "./PriceList.sol",
            "id": 1885,
            "nodeType": "ImportDirective",
            "scope": 3555,
            "sourceUnit": 4382,
            "src": "248:25:1",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "baseContracts": [
              {
                "arguments": null,
                "baseName": {
                  "contractScope": null,
                  "id": 1886,
                  "name": "OrderQueue",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4105,
                  "src": "303:10:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_OrderQueue_$4105",
                    "typeString": "contract OrderQueue"
                  }
                },
                "id": 1887,
                "nodeType": "InheritanceSpecifier",
                "src": "303:10:1"
              },
              {
                "arguments": null,
                "baseName": {
                  "contractScope": null,
                  "id": 1888,
                  "name": "PriceList",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4381,
                  "src": "315:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_PriceList_$4381",
                    "typeString": "contract PriceList"
                  }
                },
                "id": 1889,
                "nodeType": "InheritanceSpecifier",
                "src": "315:9:1"
              }
            ],
            "contractDependencies": [
              4105,
              4381
            ],
            "contractKind": "contract",
            "documentation": null,
            "fullyImplemented": true,
            "id": 3554,
            "linearizedBaseContracts": [
              3554,
              4381,
              4105
            ],
            "name": "OrderBookBase",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "id": 1892,
                "libraryName": {
                  "contractScope": null,
                  "id": 1890,
                  "name": "SafeMath",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 6818,
                  "src": "338:8:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SafeMath_$6818",
                    "typeString": "library SafeMath"
                  }
                },
                "nodeType": "UsingForDirective",
                "src": "332:24:1",
                "typeName": {
                  "id": 1891,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "351:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              },
              {
                "id": 1895,
                "libraryName": {
                  "contractScope": null,
                  "id": 1893,
                  "name": "SafeMath",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 6818,
                  "src": "368:8:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SafeMath_$6818",
                    "typeString": "library SafeMath"
                  }
                },
                "nodeType": "UsingForDirective",
                "src": "362:27:1",
                "typeName": {
                  "id": 1894,
                  "name": "uint112",
                  "nodeType": "ElementaryTypeName",
                  "src": "381:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  }
                }
              },
              {
                "id": 1898,
                "libraryName": {
                  "contractScope": null,
                  "id": 1896,
                  "name": "UQ112x112",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 7036,
                  "src": "401:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_UQ112x112_$7036",
                    "typeString": "library UQ112x112"
                  }
                },
                "nodeType": "UsingForDirective",
                "src": "395:28:1",
                "typeName": {
                  "id": 1897,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "415:7:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                }
              },
              {
                "canonicalName": "OrderBookBase.Order",
                "id": 1915,
                "members": [
                  {
                    "constant": false,
                    "id": 1900,
                    "name": "owner",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "455:13:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 1899,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "455:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1902,
                    "name": "to",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "479:10:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "typeName": {
                      "id": 1901,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "479:7:1",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1904,
                    "name": "orderId",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "500:12:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 1903,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "500:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1906,
                    "name": "price",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "523:10:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 1905,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "523:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1908,
                    "name": "amountOffer",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "544:16:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 1907,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "544:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1910,
                    "name": "amountRemain",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "571:17:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 1909,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "571:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1912,
                    "name": "orderType",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "599:14:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 1911,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "599:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  },
                  {
                    "constant": false,
                    "id": 1914,
                    "name": "orderIndex",
                    "nodeType": "VariableDeclaration",
                    "scope": 1915,
                    "src": "652:15:1",
                    "stateVariable": false,
                    "storageLocation": "default",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "typeName": {
                      "id": 1913,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "652:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "value": null,
                    "visibility": "internal"
                  }
                ],
                "name": "Order",
                "nodeType": "StructDefinition",
                "scope": 3554,
                "src": "431:289:1",
                "visibility": "public"
              },
              {
                "constant": true,
                "id": 1924,
                "name": "SELECTOR_TRANSFER",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "728:97:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                },
                "typeName": {
                  "id": 1916,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "728:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "7472616e7366657228616464726573732c75696e7432353629",
                              "id": 1920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "795:27:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                "typeString": "literal_string \"transfer(address,uint256)\""
                              },
                              "value": "transfer(address,uint256)"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                "typeString": "literal_string \"transfer(address,uint256)\""
                              }
                            ],
                            "id": 1919,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "789:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": "bytes"
                          },
                          "id": 1921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "789:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1918,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7287,
                        "src": "779:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "779:45:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    ],
                    "id": 1917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "772:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_bytes4_$",
                      "typeString": "type(bytes4)"
                    },
                    "typeName": "bytes4"
                  },
                  "id": 1923,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "772:53:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  }
                },
                "visibility": "private"
              },
              {
                "constant": true,
                "id": 1927,
                "name": "name",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "848:49:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_memory",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 1925,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "848:6:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "48796272696458204f72646572426f6f6b",
                  "id": 1926,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "878:19:1",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_5e96bc2cb52466144ef4616b78a4da8914f6774c9c1e2c58cac7bef811d6b498",
                    "typeString": "literal_string \"HybridX OrderBook\""
                  },
                  "value": "HybridX OrderBook"
                },
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1929,
                "name": "factory",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "932:22:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 1928,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "932:7:1",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1931,
                "name": "pair",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "980:19:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 1930,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "980:7:1",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1933,
                "name": "priceStep",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1089:21:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1932,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1089:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1935,
                "name": "minAmount",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1149:21:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1934,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1149:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1937,
                "name": "baseDecimal",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1245:23:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1936,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1245:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1939,
                "name": "baseToken",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1297:24:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 1938,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1297:7:1",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1941,
                "name": "quoteToken",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1348:25:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 1940,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1348:7:1",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1943,
                "name": "baseBalance",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1408:23:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1942,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1408:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1945,
                "name": "quoteBalance",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1464:24:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1944,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1464:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1947,
                "name": "protocolFeeRate",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1571:27:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1946,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1571:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1949,
                "name": "subsidyFeeRate",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1717:26:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1948,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "1717:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1953,
                "name": "marketOrders",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1833:42:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                  "typeString": "mapping(uint256 => struct OrderBookBase.Order)"
                },
                "typeName": {
                  "id": 1952,
                  "keyType": {
                    "id": 1950,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1841:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1833:22:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                    "typeString": "mapping(uint256 => struct OrderBookBase.Order)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 1951,
                    "name": "Order",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1915,
                    "src": "1849:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                      "typeString": "struct OrderBookBase.Order"
                    }
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 1958,
                "name": "userOrders",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "1936:44:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                  "typeString": "mapping(address => uint256[])"
                },
                "typeName": {
                  "id": 1957,
                  "keyType": {
                    "id": 1954,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1944:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1936:26:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                    "typeString": "mapping(address => uint256[])"
                  },
                  "valueType": {
                    "baseType": {
                      "id": 1955,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "1955:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1956,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1955:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 1972,
                "name": "OrderCreated",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 1971,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1960,
                      "indexed": true,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1972,
                      "src": "2018:21:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1959,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2018:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1962,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 1972,
                      "src": "2050:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1961,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2050:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1964,
                      "indexed": false,
                      "name": "amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1972,
                      "src": "2079:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1963,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2079:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1966,
                      "indexed": false,
                      "name": "amountRemain",
                      "nodeType": "VariableDeclaration",
                      "scope": 1972,
                      "src": "2106:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1965,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2106:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1968,
                      "indexed": false,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 1972,
                      "src": "2134:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1967,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2134:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1970,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 1972,
                      "src": "2155:4:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1969,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2155:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2007:153:1"
                },
                "src": "1989:172:1"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 1986,
                "name": "OrderUpdate",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 1985,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1974,
                      "indexed": true,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1986,
                      "src": "2197:21:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1973,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2197:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1976,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 1986,
                      "src": "2229:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1975,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2229:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1978,
                      "indexed": false,
                      "name": "amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1986,
                      "src": "2258:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1977,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2258:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1980,
                      "indexed": false,
                      "name": "amountUsed",
                      "nodeType": "VariableDeclaration",
                      "scope": 1986,
                      "src": "2285:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1979,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2285:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1982,
                      "indexed": false,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 1986,
                      "src": "2311:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1981,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2311:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1984,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 1986,
                      "src": "2332:4:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1983,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2332:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2186:151:1"
                },
                "src": "2169:169:1"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 2000,
                "name": "OrderClosed",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 1999,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 1988,
                      "indexed": true,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 2000,
                      "src": "2374:21:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1987,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2374:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1990,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 2000,
                      "src": "2406:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1989,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2406:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1992,
                      "indexed": false,
                      "name": "amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 2000,
                      "src": "2435:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1991,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2435:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1994,
                      "indexed": false,
                      "name": "amountUsed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2000,
                      "src": "2462:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1993,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2462:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1996,
                      "indexed": false,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 2000,
                      "src": "2488:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1995,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2488:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1998,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 2000,
                      "src": "2509:4:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1997,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2509:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2363:151:1"
                },
                "src": "2346:169:1"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 2014,
                "name": "OrderCanceled",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 2013,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2002,
                      "indexed": true,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 2014,
                      "src": "2553:21:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2553:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2004,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 2014,
                      "src": "2585:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2003,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2585:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2006,
                      "indexed": false,
                      "name": "amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 2014,
                      "src": "2614:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2005,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2614:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2008,
                      "indexed": false,
                      "name": "amountRemain",
                      "nodeType": "VariableDeclaration",
                      "scope": 2014,
                      "src": "2641:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2007,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2641:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2010,
                      "indexed": false,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 2014,
                      "src": "2669:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2009,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2669:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2012,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 2014,
                      "src": "2690:4:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2011,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2690:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2542:153:1"
                },
                "src": "2523:173:1"
              },
              {
                "body": {
                  "id": 2022,
                  "nodeType": "Block",
                  "src": "2725:39:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2020,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2017,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1929,
                          "src": "2736:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2018,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7293,
                            "src": "2746:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2746:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2736:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2021,
                      "nodeType": "ExpressionStatement",
                      "src": "2736:20:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2023,
                "implemented": true,
                "kind": "constructor",
                "modifiers": [],
                "name": "",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2015,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2715:2:1"
                },
                "returnParameters": {
                  "id": 2016,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2725:0:1"
                },
                "scope": 3554,
                "src": "2704:60:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 2131,
                  "nodeType": "Block",
                  "src": "2999:797:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2037,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "3018:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3018:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2039,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1929,
                              "src": "3032:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3018:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "464f5242494444454e",
                            "id": 2041,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3041:11:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_73572d81fbc15b4b4db2883eb68bbf9d58d82f493f8d7f7e93f9af3fce4add77",
                              "typeString": "literal_string \"FORBIDDEN\""
                            },
                            "value": "FORBIDDEN"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_73572d81fbc15b4b4db2883eb68bbf9d58d82f493f8d7f7e93f9af3fce4add77",
                              "typeString": "literal_string \"FORBIDDEN\""
                            }
                          ],
                          "id": 2036,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3010:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2042,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3010:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2043,
                      "nodeType": "ExpressionStatement",
                      "src": "3010:43:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2047,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2045,
                              "name": "_priceStep",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2031,
                              "src": "3092:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2046,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3106:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "3092:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5072696365205374657020496e76616c6964",
                            "id": 2048,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3109:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_8177522a9e75715a91176554b71d6f04437cf75cd4d04373d8c3c1eb35bd6a7b",
                              "typeString": "literal_string \"Price Step Invalid\""
                            },
                            "value": "Price Step Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_8177522a9e75715a91176554b71d6f04437cf75cd4d04373d8c3c1eb35bd6a7b",
                              "typeString": "literal_string \"Price Step Invalid\""
                            }
                          ],
                          "id": 2044,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3084:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3084:46:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2050,
                      "nodeType": "ExpressionStatement",
                      "src": "3084:46:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2052,
                              "name": "_minAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2033,
                              "src": "3149:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3163:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "3149:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4d696e20416d6f756e7420496e76616c6964",
                            "id": 2055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3166:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_2f10352b541e3c39f3f568aed5493b4788c2105bcec882932be87715c87cccfc",
                              "typeString": "literal_string \"Min Amount Invalid\""
                            },
                            "value": "Min Amount Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_2f10352b541e3c39f3f568aed5493b4788c2105bcec882932be87715c87cccfc",
                              "typeString": "literal_string \"Min Amount Invalid\""
                            }
                          ],
                          "id": 2051,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3141:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3141:46:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2057,
                      "nodeType": "ExpressionStatement",
                      "src": "3141:46:1"
                    },
                    {
                      "assignments": [
                        2059,
                        2061
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2059,
                          "name": "token0",
                          "nodeType": "VariableDeclaration",
                          "scope": 2131,
                          "src": "3199:14:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 2058,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3199:7:1",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 2061,
                          "name": "token1",
                          "nodeType": "VariableDeclaration",
                          "scope": 2131,
                          "src": "3215:14:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 2060,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3215:7:1",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2073,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2063,
                                    "name": "_pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2025,
                                    "src": "3249:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2062,
                                  "name": "IUniswapV2Pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5069,
                                  "src": "3234:14:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                    "typeString": "type(contract IUniswapV2Pair)"
                                  }
                                },
                                "id": 2064,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3234:21:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                                  "typeString": "contract IUniswapV2Pair"
                                }
                              },
                              "id": 2065,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4986,
                              "src": "3234:28:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 2066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3234:30:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2068,
                                    "name": "_pair",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2025,
                                    "src": "3281:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2067,
                                  "name": "IUniswapV2Pair",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5069,
                                  "src": "3266:14:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                    "typeString": "type(contract IUniswapV2Pair)"
                                  }
                                },
                                "id": 2069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3266:21:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                                  "typeString": "contract IUniswapV2Pair"
                                }
                              },
                              "id": 2070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4991,
                              "src": "3266:28:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 2071,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3266:30:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "id": 2072,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3233:64:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                          "typeString": "tuple(address,address)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3198:99:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 2091,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 2081,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 2077,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2075,
                                      "name": "token0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2059,
                                      "src": "3331:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2076,
                                      "name": "_baseToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2027,
                                      "src": "3341:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "3331:20:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 2080,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2078,
                                      "name": "token1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2061,
                                      "src": "3355:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2079,
                                      "name": "_quoteToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2029,
                                      "src": "3365:11:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "3355:21:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "3331:45:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 2082,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3330:47:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 2089,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 2085,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2083,
                                      "name": "token1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2061,
                                      "src": "3395:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2084,
                                      "name": "_baseToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2027,
                                      "src": "3405:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "3395:20:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "id": 2088,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2086,
                                      "name": "token0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2059,
                                      "src": "3419:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2087,
                                      "name": "_quoteToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2029,
                                      "src": "3429:11:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "3419:21:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "3395:45:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 2090,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3394:47:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "3330:111:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "546f6b656e205061697220496e76616c6964",
                            "id": 2092,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3456:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_3bd3ecdd67dd14cb8580ffce538780d4071d5f78c0444d895bede2cc6c07ff5f",
                              "typeString": "literal_string \"Token Pair Invalid\""
                            },
                            "value": "Token Pair Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_3bd3ecdd67dd14cb8580ffce538780d4071d5f78c0444d895bede2cc6c07ff5f",
                              "typeString": "literal_string \"Token Pair Invalid\""
                            }
                          ],
                          "id": 2074,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3308:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2093,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3308:169:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2094,
                      "nodeType": "ExpressionStatement",
                      "src": "3308:169:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2095,
                          "name": "pair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1931,
                          "src": "3490:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2096,
                          "name": "_pair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2025,
                          "src": "3497:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3490:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2098,
                      "nodeType": "ExpressionStatement",
                      "src": "3490:12:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2099,
                          "name": "baseToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1939,
                          "src": "3513:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2100,
                          "name": "_baseToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2027,
                          "src": "3525:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3513:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2102,
                      "nodeType": "ExpressionStatement",
                      "src": "3513:22:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2105,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2103,
                          "name": "quoteToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1941,
                          "src": "3546:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2104,
                          "name": "_quoteToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2029,
                          "src": "3559:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3546:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2106,
                      "nodeType": "ExpressionStatement",
                      "src": "3546:24:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2107,
                          "name": "priceStep",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "3581:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2108,
                          "name": "_priceStep",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2031,
                          "src": "3593:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3581:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2110,
                      "nodeType": "ExpressionStatement",
                      "src": "3581:22:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2111,
                          "name": "baseDecimal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1937,
                          "src": "3614:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2113,
                                  "name": "_baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2027,
                                  "src": "3635:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2112,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "3628:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2114,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3628:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$4465",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decimals",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4414,
                            "src": "3628:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                              "typeString": "function () view external returns (uint8)"
                            }
                          },
                          "id": 2116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3628:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "3614:43:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2118,
                      "nodeType": "ExpressionStatement",
                      "src": "3614:43:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2119,
                          "name": "minAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1935,
                          "src": "3668:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2120,
                          "name": "_minAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2033,
                          "src": "3680:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3668:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2122,
                      "nodeType": "ExpressionStatement",
                      "src": "3668:22:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2123,
                          "name": "protocolFeeRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1947,
                          "src": "3701:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "hexValue": "3330",
                          "id": 2124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3719:2:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_30_by_1",
                            "typeString": "int_const 30"
                          },
                          "value": "30"
                        },
                        "src": "3701:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2126,
                      "nodeType": "ExpressionStatement",
                      "src": "3701:20:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2127,
                          "name": "subsidyFeeRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1949,
                          "src": "3744:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "hexValue": "3530",
                          "id": 2128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3761:2:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_50_by_1",
                            "typeString": "int_const 50"
                          },
                          "value": "50"
                        },
                        "src": "3744:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2130,
                      "nodeType": "ExpressionStatement",
                      "src": "3744:19:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2132,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "initialize",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2034,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2025,
                      "name": "_pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 2132,
                      "src": "2859:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2024,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2859:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2027,
                      "name": "_baseToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 2132,
                      "src": "2883:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2026,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2883:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2029,
                      "name": "_quoteToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 2132,
                      "src": "2912:19:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2028,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2912:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2031,
                      "name": "_priceStep",
                      "nodeType": "VariableDeclaration",
                      "scope": 2132,
                      "src": "2942:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2030,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2942:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2033,
                      "name": "_minAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 2132,
                      "src": "2968:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2032,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2968:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2848:136:1"
                },
                "returnParameters": {
                  "id": 2035,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2999:0:1"
                },
                "scope": 3554,
                "src": "2829:967:1",
                "stateMutability": "nonpayable",
                "superFunction": 4480,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 2148,
                  "nodeType": "Block",
                  "src": "3868:71:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2137,
                          "name": "balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2135,
                          "src": "3879:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2143,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7335,
                                  "src": "3925:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                ],
                                "id": 2142,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3917:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 2144,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3917:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2139,
                                  "name": "baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1939,
                                  "src": "3896:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2138,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "3889:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3889:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$4465",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4426,
                            "src": "3889:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3889:42:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3879:52:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2147,
                      "nodeType": "ExpressionStatement",
                      "src": "3879:52:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2149,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_getBaseBalance",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2133,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "3828:2:1"
                },
                "returnParameters": {
                  "id": 2136,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2135,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 2149,
                      "src": "3854:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2134,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3854:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3853:14:1"
                },
                "scope": 3554,
                "src": "3804:135:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2165,
                  "nodeType": "Block",
                  "src": "4012:72:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2154,
                          "name": "balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2152,
                          "src": "4023:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2160,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7335,
                                  "src": "4070:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                ],
                                "id": 2159,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4062:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 2161,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4062:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2156,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "4040:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2155,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "4033:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4033:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$4465",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4426,
                            "src": "4033:28:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4033:43:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4023:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2164,
                      "nodeType": "ExpressionStatement",
                      "src": "4023:53:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2166,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_getQuoteBalance",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2150,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "3972:2:1"
                },
                "returnParameters": {
                  "id": 2153,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2152,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 2166,
                      "src": "3998:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2151,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3998:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3997:14:1"
                },
                "scope": 3554,
                "src": "3947:137:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2191,
                  "nodeType": "Block",
                  "src": "4127:144:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2169,
                          "name": "baseBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1943,
                          "src": "4138:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2175,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7335,
                                  "src": "4188:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                ],
                                "id": 2174,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4180:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 2176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4180:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2171,
                                  "name": "baseToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1939,
                                  "src": "4159:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2170,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "4152:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2172,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4152:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$4465",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4426,
                            "src": "4152:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4152:42:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4138:56:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2179,
                      "nodeType": "ExpressionStatement",
                      "src": "4138:56:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2180,
                          "name": "quoteBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1945,
                          "src": "4205:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2186,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7335,
                                  "src": "4257:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                    "typeString": "contract OrderBookBase"
                                  }
                                ],
                                "id": 2185,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4249:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 2187,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4249:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2182,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "4227:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2181,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "4220:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2183,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4220:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$4465",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2184,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4426,
                            "src": "4220:28:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 2188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4220:43:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4205:58:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2190,
                      "nodeType": "ExpressionStatement",
                      "src": "4205:58:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2192,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_updateBalance",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2167,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "4115:2:1"
                },
                "returnParameters": {
                  "id": 2168,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "4127:0:1"
                },
                "scope": 3554,
                "src": "4092:179:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2233,
                  "nodeType": "Block",
                  "src": "4355:215:1",
                  "statements": [
                    {
                      "assignments": [
                        2202,
                        2204
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2202,
                          "name": "success",
                          "nodeType": "VariableDeclaration",
                          "scope": 2233,
                          "src": "4367:12:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 2201,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "4367:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 2204,
                          "name": "data",
                          "nodeType": "VariableDeclaration",
                          "scope": 2233,
                          "src": "4381:17:1",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes"
                          },
                          "typeName": {
                            "id": 2203,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "4381:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2214,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2209,
                                "name": "SELECTOR_TRANSFER",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1924,
                                "src": "4436:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 2210,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2196,
                                "src": "4455:2:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 2211,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2198,
                                "src": "4459:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2207,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7280,
                                "src": "4413:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 2208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodeWithSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4413:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes4) pure returns (bytes memory)"
                              }
                            },
                            "id": 2212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4413:52:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2205,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2194,
                            "src": "4402:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4402:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 2213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4402:64:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "tuple(bool,bytes memory)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "4366:100:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 2229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2216,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2202,
                              "src": "4485:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 2227,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2220,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2217,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2204,
                                        "src": "4497:4:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2218,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "4497:11:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 2219,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4512:1:1",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "4497:16:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 2223,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2204,
                                        "src": "4528:4:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 2224,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4535:4:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": "bool"
                                          }
                                        ],
                                        "id": 2225,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "4534:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2221,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7280,
                                        "src": "4517:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 2222,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "4517:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 2226,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4517:24:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "4497:44:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 2228,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4496:46:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "4485:57:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5452414e534645525f4641494c4544",
                            "id": 2230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4544:17:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72",
                              "typeString": "literal_string \"TRANSFER_FAILED\""
                            },
                            "value": "TRANSFER_FAILED"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_8bf8f0d780f13740660fe63233b17f96cb1813889e7dce4121e55b817b367b72",
                              "typeString": "literal_string \"TRANSFER_FAILED\""
                            }
                          ],
                          "id": 2215,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "4477:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4477:85:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2232,
                      "nodeType": "ExpressionStatement",
                      "src": "4477:85:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2234,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_safeTransfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2199,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2194,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 2234,
                      "src": "4302:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2193,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4302:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2196,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 2234,
                      "src": "4317:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2195,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4317:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2198,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 2234,
                      "src": "4329:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2197,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4329:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "4301:39:1"
                },
                "returnParameters": {
                  "id": 2200,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "4355:0:1"
                },
                "scope": 3554,
                "src": "4279:291:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2302,
                  "nodeType": "Block",
                  "src": "4676:399:1",
                  "statements": [
                    {
                      "assignments": [
                        2246
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2246,
                          "name": "WETH",
                          "nodeType": "VariableDeclaration",
                          "scope": 2302,
                          "src": "4687:12:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 2245,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4687:7:1",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2252,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2248,
                                "name": "factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1929,
                                "src": "4720:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 2247,
                              "name": "IOrderBookFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4738,
                              "src": "4702:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IOrderBookFactory_$4738_$",
                                "typeString": "type(contract IOrderBookFactory)"
                              }
                            },
                            "id": 2249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4702:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IOrderBookFactory_$4738",
                              "typeString": "contract IOrderBookFactory"
                            }
                          },
                          "id": 2250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "WETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4700,
                          "src": "4702:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                            "typeString": "function () pure external returns (address)"
                          }
                        },
                        "id": 2251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4702:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "4687:48:1"
                    },
                    {
                      "body": {
                        "id": 2300,
                        "nodeType": "Block",
                        "src": "4784:284:1",
                        "statements": [
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 2264,
                                "name": "WETH",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2246,
                                "src": "4803:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 2265,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2236,
                                "src": "4811:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4803:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 2298,
                              "nodeType": "Block",
                              "src": "4977:80:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 2289,
                                        "name": "token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2236,
                                        "src": "5010:5:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2290,
                                          "name": "accounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2239,
                                          "src": "5017:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 2292,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2291,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2254,
                                          "src": "5026:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5017:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2293,
                                          "name": "amounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2242,
                                          "src": "5030:7:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 2295,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2294,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2254,
                                          "src": "5038:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5030:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 2288,
                                      "name": "_safeTransfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2234,
                                      "src": "4996:13:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                        "typeString": "function (address,address,uint256)"
                                      }
                                    },
                                    "id": 2296,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4996:45:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2297,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4996:45:1"
                                }
                              ]
                            },
                            "id": 2299,
                            "nodeType": "IfStatement",
                            "src": "4799:258:1",
                            "trueBody": {
                              "id": 2287,
                              "nodeType": "Block",
                              "src": "4817:141:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2271,
                                          "name": "amounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2242,
                                          "src": "4857:7:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 2273,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2272,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2254,
                                          "src": "4865:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4857:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 2268,
                                            "name": "WETH",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2246,
                                            "src": "4842:4:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 2267,
                                          "name": "IWETH",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5089,
                                          "src": "4836:5:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_IWETH_$5089_$",
                                            "typeString": "type(contract IWETH)"
                                          }
                                        },
                                        "id": 2269,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4836:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IWETH_$5089",
                                          "typeString": "contract IWETH"
                                        }
                                      },
                                      "id": 2270,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "withdraw",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5088,
                                      "src": "4836:20:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                        "typeString": "function (uint256) external"
                                      }
                                    },
                                    "id": 2274,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4836:32:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2275,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4836:32:1"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2279,
                                          "name": "accounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2239,
                                          "src": "4918:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 2281,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2280,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2254,
                                          "src": "4927:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4918:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2282,
                                          "name": "amounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2242,
                                          "src": "4931:7:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 2284,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2283,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2254,
                                          "src": "4939:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4931:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2276,
                                        "name": "TransferHelper",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6976,
                                        "src": "4887:14:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_TransferHelper_$6976_$",
                                          "typeString": "type(library TransferHelper)"
                                        }
                                      },
                                      "id": 2278,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "safeTransferETH",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6975,
                                      "src": "4887:30:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                        "typeString": "function (address,uint256)"
                                      }
                                    },
                                    "id": 2285,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4887:55:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2286,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4887:55:1"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2257,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2254,
                          "src": "4760:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2258,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2239,
                            "src": "4762:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 2259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4762:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4760:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2301,
                      "initializationExpression": {
                        "assignments": [
                          2254
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2254,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 2301,
                            "src": "4750:6:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2253,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "4750:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2256,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4757:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4750:8:1"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4779:3:1",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 2261,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2254,
                            "src": "4779:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2263,
                        "nodeType": "ExpressionStatement",
                        "src": "4779:3:1"
                      },
                      "nodeType": "ForStatement",
                      "src": "4746:322:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2303,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_batchTransfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2243,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2236,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 2303,
                      "src": "4602:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2235,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4602:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2239,
                      "name": "accounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 2303,
                      "src": "4617:25:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2237,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4617:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2238,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4617:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2242,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 2303,
                      "src": "4644:21:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2240,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4644:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2241,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4644:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "4601:65:1"
                },
                "returnParameters": {
                  "id": 2244,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "4676:0:1"
                },
                "scope": 3554,
                "src": "4578:497:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2346,
                  "nodeType": "Block",
                  "src": "5157:281:1",
                  "statements": [
                    {
                      "assignments": [
                        2313
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2313,
                          "name": "WETH",
                          "nodeType": "VariableDeclaration",
                          "scope": 2346,
                          "src": "5168:12:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 2312,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5168:7:1",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2319,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2315,
                                "name": "factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1929,
                                "src": "5201:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 2314,
                              "name": "IOrderBookFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4738,
                              "src": "5183:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IOrderBookFactory_$4738_$",
                                "typeString": "type(contract IOrderBookFactory)"
                              }
                            },
                            "id": 2316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5183:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IOrderBookFactory_$4738",
                              "typeString": "contract IOrderBookFactory"
                            }
                          },
                          "id": 2317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "WETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4700,
                          "src": "5183:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                            "typeString": "function () pure external returns (address)"
                          }
                        },
                        "id": 2318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5183:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5168:48:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2320,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2305,
                          "src": "5231:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2321,
                          "name": "WETH",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2313,
                          "src": "5240:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5231:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 2344,
                        "nodeType": "Block",
                        "src": "5372:59:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2339,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2305,
                                  "src": "5401:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 2340,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2307,
                                  "src": "5408:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 2341,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2309,
                                  "src": "5412:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2338,
                                "name": "_safeTransfer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2234,
                                "src": "5387:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 2342,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5387:32:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2343,
                            "nodeType": "ExpressionStatement",
                            "src": "5387:32:1"
                          }
                        ]
                      },
                      "id": 2345,
                      "nodeType": "IfStatement",
                      "src": "5227:204:1",
                      "trueBody": {
                        "id": 2337,
                        "nodeType": "Block",
                        "src": "5246:112:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2327,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2309,
                                  "src": "5282:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2324,
                                      "name": "WETH",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2313,
                                      "src": "5267:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2323,
                                    "name": "IWETH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5089,
                                    "src": "5261:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IWETH_$5089_$",
                                      "typeString": "type(contract IWETH)"
                                    }
                                  },
                                  "id": 2325,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5261:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IWETH_$5089",
                                    "typeString": "contract IWETH"
                                  }
                                },
                                "id": 2326,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "withdraw",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5088,
                                "src": "5261:20:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256) external"
                                }
                              },
                              "id": 2328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5261:28:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2329,
                            "nodeType": "ExpressionStatement",
                            "src": "5261:28:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2333,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2307,
                                  "src": "5335:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 2334,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2309,
                                  "src": "5339:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2330,
                                  "name": "TransferHelper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6976,
                                  "src": "5304:14:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TransferHelper_$6976_$",
                                    "typeString": "type(library TransferHelper)"
                                  }
                                },
                                "id": 2332,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "safeTransferETH",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6975,
                                "src": "5304:30:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256)"
                                }
                              },
                              "id": 2335,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5304:42:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2336,
                            "nodeType": "ExpressionStatement",
                            "src": "5304:42:1"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 2347,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_singleTransfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2310,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2305,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 2347,
                      "src": "5108:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2304,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5108:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2307,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 2347,
                      "src": "5123:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2306,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5123:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2309,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 2347,
                      "src": "5135:11:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2308,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5135:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5107:40:1"
                },
                "returnParameters": {
                  "id": 2311,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "5157:0:1"
                },
                "scope": 3554,
                "src": "5083:355:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2350,
                "name": "unlocked",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "5446:25:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2348,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "5446:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 2349,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "5470:1:1",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                },
                "visibility": "private"
              },
              {
                "body": {
                  "id": 2368,
                  "nodeType": "Block",
                  "src": "5494:109:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2353,
                              "name": "unlocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2350,
                              "src": "5513:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5525:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "5513:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4c4f434b4544",
                            "id": 2356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5528:8:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_eb4a01a12a4bbfa1bc780c16c5b2b6720cdf4f3c29cabd8c0f76fec3a575096b",
                              "typeString": "literal_string \"LOCKED\""
                            },
                            "value": "LOCKED"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_eb4a01a12a4bbfa1bc780c16c5b2b6720cdf4f3c29cabd8c0f76fec3a575096b",
                              "typeString": "literal_string \"LOCKED\""
                            }
                          ],
                          "id": 2352,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "5505:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5505:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2358,
                      "nodeType": "ExpressionStatement",
                      "src": "5505:32:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2359,
                          "name": "unlocked",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "5548:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5559:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5548:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2362,
                      "nodeType": "ExpressionStatement",
                      "src": "5548:12:1"
                    },
                    {
                      "id": 2363,
                      "nodeType": "PlaceholderStatement",
                      "src": "5571:1:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2364,
                          "name": "unlocked",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "5583:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5594:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "5583:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2367,
                      "nodeType": "ExpressionStatement",
                      "src": "5583:12:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2369,
                "name": "lock",
                "nodeType": "ModifierDefinition",
                "parameters": {
                  "id": 2351,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "5491:2:1"
                },
                "src": "5478:125:1",
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2371,
                "name": "orderIdGenerator",
                "nodeType": "VariableDeclaration",
                "scope": 3554,
                "src": "5630:29:1",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2370,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "5630:4:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "private"
              },
              {
                "body": {
                  "id": 2381,
                  "nodeType": "Block",
                  "src": "5727:71:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": false,
                        "src": "5738:18:1",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 2376,
                          "name": "orderIdGenerator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2371,
                          "src": "5738:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2378,
                      "nodeType": "ExpressionStatement",
                      "src": "5738:18:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2379,
                        "name": "orderIdGenerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2371,
                        "src": "5774:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "functionReturnParameters": 2375,
                      "id": 2380,
                      "nodeType": "Return",
                      "src": "5767:23:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2382,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_generateOrderId",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2372,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "5691:2:1"
                },
                "returnParameters": {
                  "id": 2375,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2374,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 2382,
                      "src": "5721:4:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2373,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5721:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5720:6:1"
                },
                "scope": 3554,
                "src": "5666:132:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "private"
              },
              {
                "body": {
                  "id": 2396,
                  "nodeType": "Block",
                  "src": "5890:46:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2390,
                          "name": "orderIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2388,
                          "src": "5901:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2391,
                            "name": "userOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1958,
                            "src": "5912:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                              "typeString": "mapping(address => uint256[] storage ref)"
                            }
                          },
                          "id": 2393,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2392,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2384,
                            "src": "5923:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5912:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                            "typeString": "uint256[] storage ref"
                          }
                        },
                        "src": "5901:27:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 2395,
                      "nodeType": "ExpressionStatement",
                      "src": "5901:27:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2397,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getUserOrders",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2385,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2384,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 2397,
                      "src": "5829:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2383,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5829:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5828:14:1"
                },
                "returnParameters": {
                  "id": 2389,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2388,
                      "name": "orderIds",
                      "nodeType": "VariableDeclaration",
                      "scope": 2397,
                      "src": "5866:22:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2386,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "5866:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2387,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5866:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5865:24:1"
                },
                "scope": 3554,
                "src": "5806:130:1",
                "stateMutability": "view",
                "superFunction": 4524,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 2429,
                  "nodeType": "Block",
                  "src": "6012:238:1",
                  "statements": [
                    {
                      "assignments": [
                        2403,
                        2405
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2403,
                          "name": "reserveBase",
                          "nodeType": "VariableDeclaration",
                          "scope": 2429,
                          "src": "6024:19:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          },
                          "typeName": {
                            "id": 2402,
                            "name": "uint112",
                            "nodeType": "ElementaryTypeName",
                            "src": "6024:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 2405,
                          "name": "reserveQuote",
                          "nodeType": "VariableDeclaration",
                          "scope": 2429,
                          "src": "6045:20:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          },
                          "typeName": {
                            "id": 2404,
                            "name": "uint112",
                            "nodeType": "ElementaryTypeName",
                            "src": "6045:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2412,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2408,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1931,
                            "src": "6098:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2409,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1939,
                            "src": "6104:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2410,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "6115:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2406,
                            "name": "OrderBookLibrary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6729,
                            "src": "6069:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                              "typeString": "type(library OrderBookLibrary)"
                            }
                          },
                          "id": 2407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getReserves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5682,
                          "src": "6069:28:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                            "typeString": "function (address,address,address) view returns (uint112,uint112)"
                          }
                        },
                        "id": 2411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6069:57:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                          "typeString": "tuple(uint112,uint112)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "6023:103:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "id": 2415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2413,
                          "name": "reserveBase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2403,
                          "src": "6141:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6156:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6141:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 2428,
                      "nodeType": "IfStatement",
                      "src": "6137:106:1",
                      "trueBody": {
                        "id": 2427,
                        "nodeType": "Block",
                        "src": "6159:84:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 2416,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2400,
                                "src": "6174:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "3130",
                                        "id": 2419,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6199:2:1",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2420,
                                        "name": "baseDecimal",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1937,
                                        "src": "6205:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6199:17:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2417,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2405,
                                      "src": "6182:12:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint112",
                                        "typeString": "uint112"
                                      }
                                    },
                                    "id": 2418,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6803,
                                    "src": "6182:16:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2422,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6182:35:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2423,
                                  "name": "reserveBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2403,
                                  "src": "6220:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint112",
                                    "typeString": "uint112"
                                  }
                                },
                                "src": "6182:49:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6174:57:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2426,
                            "nodeType": "ExpressionStatement",
                            "src": "6174:57:1"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 2430,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2398,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "5961:2:1"
                },
                "returnParameters": {
                  "id": 2401,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2400,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 2430,
                      "src": "6000:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2399,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6000:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5999:12:1"
                },
                "scope": 3554,
                "src": "5944:306:1",
                "stateMutability": "view",
                "superFunction": 4563,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 2443,
                  "nodeType": "Block",
                  "src": "6332:58:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2435,
                          "name": "decimal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2433,
                          "src": "6343:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2437,
                                  "name": "quoteToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1941,
                                  "src": "6360:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2436,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4465,
                                "src": "6353:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 2438,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6353:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$4465",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 2439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "decimals",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4414,
                            "src": "6353:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                              "typeString": "function () view external returns (uint8)"
                            }
                          },
                          "id": 2440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6353:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "6343:39:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2442,
                      "nodeType": "ExpressionStatement",
                      "src": "6343:39:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2444,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "priceDecimal",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2431,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "6279:2:1"
                },
                "returnParameters": {
                  "id": 2434,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2433,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2444,
                      "src": "6318:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2432,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6318:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6317:14:1"
                },
                "scope": 3554,
                "src": "6258:132:1",
                "stateMutability": "view",
                "superFunction": 4585,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 2460,
                  "nodeType": "Block",
                  "src": "6493:77:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2451,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2449,
                          "src": "6504:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2452,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "6516:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2453,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2446,
                              "src": "6530:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "6516:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 2456,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4113,
                            "src": "6552:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "6516:46:1",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 2455,
                            "name": "LIMIT_BUY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4110,
                            "src": "6540:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6504:58:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2459,
                      "nodeType": "ExpressionStatement",
                      "src": "6504:58:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2461,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "tradeDirection",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2447,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2446,
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "6422:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2445,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6422:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6421:17:1"
                },
                "returnParameters": {
                  "id": 2450,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2449,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "6477:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2448,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6477:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6476:16:1"
                },
                "scope": 3554,
                "src": "6398:172:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2551,
                  "nodeType": "Block",
                  "src": "6815:681:1",
                  "statements": [
                    {
                      "assignments": [
                        2481
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2481,
                          "name": "_userOrders",
                          "nodeType": "VariableDeclaration",
                          "scope": 2551,
                          "src": "6826:25:1",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 2479,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "6826:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2480,
                            "length": null,
                            "nodeType": "ArrayTypeName",
                            "src": "6826:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[]"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2485,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2482,
                          "name": "userOrders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1958,
                          "src": "6854:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                            "typeString": "mapping(address => uint256[] storage ref)"
                          }
                        },
                        "id": 2484,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2483,
                          "name": "user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2463,
                          "src": "6865:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6854:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "6826:44:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2490,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2487,
                                "name": "_userOrders",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2481,
                                "src": "6889:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 2488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6889:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30786666",
                              "id": 2489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6910:4:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xff"
                            },
                            "src": "6889:25:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f72646572204e756d626572206973206578636565646564",
                            "id": 2491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6916:26:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_78d45d525cf2f76811203462b6653e5a628b9d28f16eb68f3a19819a9a2d04db",
                              "typeString": "literal_string \"Order Number is exceeded\""
                            },
                            "value": "Order Number is exceeded"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_78d45d525cf2f76811203462b6653e5a628b9d28f16eb68f3a19819a9a2d04db",
                              "typeString": "literal_string \"Order Number is exceeded\""
                            }
                          ],
                          "id": 2486,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "6881:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6881:62:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2493,
                      "nodeType": "ExpressionStatement",
                      "src": "6881:62:1"
                    },
                    {
                      "assignments": [
                        2495
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2495,
                          "name": "orderIndex",
                          "nodeType": "VariableDeclaration",
                          "scope": 2551,
                          "src": "6954:15:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2494,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "6954:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2498,
                      "initialValue": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2496,
                          "name": "_userOrders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2481,
                          "src": "6972:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 2497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6972:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "6954:36:1"
                    },
                    {
                      "assignments": [
                        2500
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2500,
                          "name": "order",
                          "nodeType": "VariableDeclaration",
                          "scope": 2551,
                          "src": "7003:18:1",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                            "typeString": "struct OrderBookBase.Order"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 2499,
                            "name": "Order",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 1915,
                            "src": "7003:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                              "typeString": "struct OrderBookBase.Order"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2512,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2502,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2463,
                            "src": "7044:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2503,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2465,
                            "src": "7063:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2504,
                              "name": "_generateOrderId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2382,
                              "src": "7081:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                "typeString": "function () returns (uint256)"
                              }
                            },
                            "id": 2505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7081:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2506,
                            "name": "_price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2471,
                            "src": "7114:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2507,
                            "name": "_amountOffer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2467,
                            "src": "7135:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2508,
                            "name": "_amountRemain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2469,
                            "src": "7162:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2509,
                            "name": "_type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2473,
                            "src": "7190:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2510,
                            "name": "orderIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2495,
                            "src": "7210:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2501,
                          "name": "Order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1915,
                          "src": "7024:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Order_$1915_storage_ptr_$",
                            "typeString": "type(struct OrderBookBase.Order storage pointer)"
                          }
                        },
                        "id": 2511,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7024:197:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$1915_memory",
                          "typeString": "struct OrderBookBase.Order memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "7003:218:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2517,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2500,
                              "src": "7254:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2518,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1904,
                            "src": "7254:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2513,
                              "name": "userOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1958,
                              "src": "7232:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                                "typeString": "mapping(address => uint256[] storage ref)"
                              }
                            },
                            "id": 2515,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2514,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2463,
                              "src": "7243:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7232:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 2516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "push",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7232:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) returns (uint256)"
                          }
                        },
                        "id": 2519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7232:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2520,
                      "nodeType": "ExpressionStatement",
                      "src": "7232:36:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2521,
                            "name": "marketOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1953,
                            "src": "7281:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                              "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                            }
                          },
                          "id": 2524,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2522,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2500,
                              "src": "7294:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2523,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1904,
                            "src": "7294:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "7281:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_storage",
                            "typeString": "struct OrderBookBase.Order storage ref"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2525,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2500,
                          "src": "7311:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                            "typeString": "struct OrderBookBase.Order memory"
                          }
                        },
                        "src": "7281:35:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$1915_storage",
                          "typeString": "struct OrderBookBase.Order storage ref"
                        }
                      },
                      "id": 2527,
                      "nodeType": "ExpressionStatement",
                      "src": "7281:35:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2529,
                              "name": "_type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2473,
                              "src": "7338:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2530,
                              "name": "_price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2471,
                              "src": "7345:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2528,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3810,
                            "src": "7331:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 2531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7331:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7356:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7331:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 2540,
                      "nodeType": "IfStatement",
                      "src": "7327:82:1",
                      "trueBody": {
                        "id": 2539,
                        "nodeType": "Block",
                        "src": "7359:50:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2535,
                                  "name": "_type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2473,
                                  "src": "7383:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 2536,
                                  "name": "_price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2471,
                                  "src": "7390:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2534,
                                "name": "addPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4283,
                                "src": "7374:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256,uint256)"
                                }
                              },
                              "id": 2537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7374:23:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2538,
                            "nodeType": "ExpressionStatement",
                            "src": "7374:23:1"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2542,
                            "name": "_type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2473,
                            "src": "7426:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2543,
                            "name": "_price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2471,
                            "src": "7433:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2544,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2500,
                              "src": "7441:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2545,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1904,
                            "src": "7441:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2541,
                          "name": "push",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3845,
                          "src": "7421:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                            "typeString": "function (uint256,uint256,uint256)"
                          }
                        },
                        "id": 2546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7421:34:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2547,
                      "nodeType": "ExpressionStatement",
                      "src": "7421:34:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2548,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2500,
                          "src": "7475:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                            "typeString": "struct OrderBookBase.Order memory"
                          }
                        },
                        "id": 2549,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "orderId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1904,
                        "src": "7475:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "functionReturnParameters": 2477,
                      "id": 2550,
                      "nodeType": "Return",
                      "src": "7468:20:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2552,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_addLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2474,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2463,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6637:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2462,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6637:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2465,
                      "name": "_to",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6660:11:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2464,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6660:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2467,
                      "name": "_amountOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6682:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2466,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6682:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2469,
                      "name": "_amountRemain",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6710:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2468,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6710:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2471,
                      "name": "_price",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6739:11:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2470,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6739:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2473,
                      "name": "_type",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6761:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2472,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6761:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6626:146:1"
                },
                "returnParameters": {
                  "id": 2477,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2476,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 2552,
                      "src": "6801:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2475,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6801:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6800:14:1"
                },
                "scope": 3554,
                "src": "6603:893:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2639,
                  "nodeType": "Block",
                  "src": "7597:918:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2558,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2554,
                              "src": "7659:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2559,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1912,
                            "src": "7659:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2560,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2554,
                              "src": "7676:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2561,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "price",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1906,
                            "src": "7676:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2557,
                          "name": "pop",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3902,
                          "src": "7655:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) returns (uint256)"
                          }
                        },
                        "id": 2562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7655:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2563,
                      "nodeType": "ExpressionStatement",
                      "src": "7655:33:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "delete",
                        "prefix": true,
                        "src": "7743:34:1",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2564,
                            "name": "marketOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1953,
                            "src": "7750:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                              "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                            }
                          },
                          "id": 2567,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2565,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2554,
                              "src": "7763:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2566,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1904,
                            "src": "7763:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "7750:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_storage",
                            "typeString": "struct OrderBookBase.Order storage ref"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2569,
                      "nodeType": "ExpressionStatement",
                      "src": "7743:34:1"
                    },
                    {
                      "assignments": [
                        2571
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2571,
                          "name": "userOrderSize",
                          "nodeType": "VariableDeclaration",
                          "scope": 2639,
                          "src": "7820:18:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2570,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "7820:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2577,
                      "initialValue": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2572,
                            "name": "userOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1958,
                            "src": "7841:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                              "typeString": "mapping(address => uint256[] storage ref)"
                            }
                          },
                          "id": 2575,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2573,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2554,
                              "src": "7852:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2574,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1900,
                            "src": "7852:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7841:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                            "typeString": "uint256[] storage ref"
                          }
                        },
                        "id": 2576,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7841:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "7820:51:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2579,
                              "name": "userOrderSize",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2571,
                              "src": "7890:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2580,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2554,
                                "src": "7906:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2581,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "orderIndex",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1914,
                              "src": "7906:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7890:32:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "696e76616c6964206f72646572496e646578",
                            "id": 2583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7924:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_3552c4d882804f653aedd03367b9508bad44853f1c69082142d3dce9aee6dd7e",
                              "typeString": "literal_string \"invalid orderIndex\""
                            },
                            "value": "invalid orderIndex"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_3552c4d882804f653aedd03367b9508bad44853f1c69082142d3dce9aee6dd7e",
                              "typeString": "literal_string \"invalid orderIndex\""
                            }
                          ],
                          "id": 2578,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "7882:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7882:63:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2585,
                      "nodeType": "ExpressionStatement",
                      "src": "7882:63:1"
                    },
                    {
                      "assignments": [
                        2587
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2587,
                          "name": "lastUsedOrder",
                          "nodeType": "VariableDeclaration",
                          "scope": 2639,
                          "src": "8028:18:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2586,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "8028:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2596,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2588,
                            "name": "userOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1958,
                            "src": "8049:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                              "typeString": "mapping(address => uint256[] storage ref)"
                            }
                          },
                          "id": 2591,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2589,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2554,
                              "src": "8060:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2590,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1900,
                            "src": "8060:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8049:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                            "typeString": "uint256[] storage ref"
                          }
                        },
                        "id": 2595,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2592,
                            "name": "userOrderSize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2571,
                            "src": "8073:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8089:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8073:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8049:42:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "8028:63:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2597,
                              "name": "userOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1958,
                              "src": "8102:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                                "typeString": "mapping(address => uint256[] storage ref)"
                              }
                            },
                            "id": 2602,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2598,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2554,
                                "src": "8113:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2599,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1900,
                              "src": "8113:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8102:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 2603,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2600,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2554,
                              "src": "8126:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2601,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1914,
                            "src": "8126:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "8102:41:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2604,
                          "name": "lastUsedOrder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2587,
                          "src": "8146:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8102:57:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2606,
                      "nodeType": "ExpressionStatement",
                      "src": "8102:57:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2607,
                              "name": "marketOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1953,
                              "src": "8208:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                                "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                              }
                            },
                            "id": 2609,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2608,
                              "name": "lastUsedOrder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2587,
                              "src": "8221:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8208:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_storage",
                              "typeString": "struct OrderBookBase.Order storage ref"
                            }
                          },
                          "id": 2610,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "orderIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1914,
                          "src": "8208:38:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2611,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2554,
                            "src": "8249:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 2612,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "orderIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1914,
                          "src": "8249:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8208:57:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2614,
                      "nodeType": "ExpressionStatement",
                      "src": "8208:57:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2615,
                              "name": "userOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1958,
                              "src": "8331:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                                "typeString": "mapping(address => uint256[] storage ref)"
                              }
                            },
                            "id": 2618,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2616,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2554,
                                "src": "8342:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2617,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1900,
                              "src": "8342:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8331:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 2619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pop",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8331:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                            "typeString": "function ()"
                          }
                        },
                        "id": 2620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8331:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2621,
                      "nodeType": "ExpressionStatement",
                      "src": "8331:29:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2629,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2623,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2554,
                                "src": "8408:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2624,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "orderType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1912,
                              "src": "8408:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2625,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2554,
                                "src": "8425:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2626,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "price",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1906,
                              "src": "8425:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2622,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3810,
                            "src": "8401:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 2627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8401:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8441:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8401:41:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 2638,
                      "nodeType": "IfStatement",
                      "src": "8397:111:1",
                      "trueBody": {
                        "id": 2637,
                        "nodeType": "Block",
                        "src": "8443:65:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2631,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2554,
                                    "src": "8467:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 2632,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "orderType",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1912,
                                  "src": "8467:15:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2633,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2554,
                                    "src": "8484:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 2634,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "price",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1906,
                                  "src": "8484:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2630,
                                "name": "delPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4331,
                                "src": "8458:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256,uint256)"
                                }
                              },
                              "id": 2635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8458:38:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2636,
                            "nodeType": "ExpressionStatement",
                            "src": "8458:38:1"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 2640,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_removeFrontLimitOrderOfQueue",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2555,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2554,
                      "name": "order",
                      "nodeType": "VariableDeclaration",
                      "scope": 2640,
                      "src": "7568:18:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                        "typeString": "struct OrderBookBase.Order"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2553,
                        "name": "Order",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1915,
                        "src": "7568:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                          "typeString": "struct OrderBookBase.Order"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "7567:20:1"
                },
                "returnParameters": {
                  "id": 2556,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "7597:0:1"
                },
                "scope": 3554,
                "src": "7529:986:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2729,
                  "nodeType": "Block",
                  "src": "8604:902:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2646,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "8649:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2647,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1912,
                            "src": "8649:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2648,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "8666:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2649,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "price",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1906,
                            "src": "8666:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2650,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "8679:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2651,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1904,
                            "src": "8679:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2645,
                          "name": "del",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4104,
                          "src": "8645:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                            "typeString": "function (uint256,uint256,uint256)"
                          }
                        },
                        "id": 2652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8645:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2653,
                      "nodeType": "ExpressionStatement",
                      "src": "8645:48:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2658,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "delete",
                        "prefix": true,
                        "src": "8734:34:1",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2654,
                            "name": "marketOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1953,
                            "src": "8741:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                              "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                            }
                          },
                          "id": 2657,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2655,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "8754:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2656,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1904,
                            "src": "8754:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "8741:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_storage",
                            "typeString": "struct OrderBookBase.Order storage ref"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2659,
                      "nodeType": "ExpressionStatement",
                      "src": "8734:34:1"
                    },
                    {
                      "assignments": [
                        2661
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2661,
                          "name": "userOrderSize",
                          "nodeType": "VariableDeclaration",
                          "scope": 2729,
                          "src": "8811:18:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2660,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "8811:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2667,
                      "initialValue": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2662,
                            "name": "userOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1958,
                            "src": "8832:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                              "typeString": "mapping(address => uint256[] storage ref)"
                            }
                          },
                          "id": 2665,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2663,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "8843:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2664,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1900,
                            "src": "8843:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8832:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                            "typeString": "uint256[] storage ref"
                          }
                        },
                        "id": 2666,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8832:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "8811:51:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2672,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2669,
                              "name": "userOrderSize",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2661,
                              "src": "8881:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2670,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2642,
                                "src": "8897:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2671,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "orderIndex",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1914,
                              "src": "8897:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8881:32:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "696e76616c6964206f72646572496e646578",
                            "id": 2673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8915:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_3552c4d882804f653aedd03367b9508bad44853f1c69082142d3dce9aee6dd7e",
                              "typeString": "literal_string \"invalid orderIndex\""
                            },
                            "value": "invalid orderIndex"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_3552c4d882804f653aedd03367b9508bad44853f1c69082142d3dce9aee6dd7e",
                              "typeString": "literal_string \"invalid orderIndex\""
                            }
                          ],
                          "id": 2668,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "8873:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 2674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8873:63:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2675,
                      "nodeType": "ExpressionStatement",
                      "src": "8873:63:1"
                    },
                    {
                      "assignments": [
                        2677
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2677,
                          "name": "lastUsedOrder",
                          "nodeType": "VariableDeclaration",
                          "scope": 2729,
                          "src": "9019:18:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2676,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "9019:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2686,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2678,
                            "name": "userOrders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1958,
                            "src": "9040:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                              "typeString": "mapping(address => uint256[] storage ref)"
                            }
                          },
                          "id": 2681,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2679,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "9051:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2680,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1900,
                            "src": "9051:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9040:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                            "typeString": "uint256[] storage ref"
                          }
                        },
                        "id": 2685,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2682,
                            "name": "userOrderSize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2661,
                            "src": "9064:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9080:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9064:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9040:42:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "9019:63:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2687,
                              "name": "userOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1958,
                              "src": "9093:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                                "typeString": "mapping(address => uint256[] storage ref)"
                              }
                            },
                            "id": 2692,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2688,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2642,
                                "src": "9104:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2689,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1900,
                              "src": "9104:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9093:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 2693,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2690,
                              "name": "order",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "9117:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                "typeString": "struct OrderBookBase.Order memory"
                              }
                            },
                            "id": 2691,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "orderIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1914,
                            "src": "9117:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "9093:41:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 2694,
                          "name": "lastUsedOrder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2677,
                          "src": "9137:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9093:57:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2696,
                      "nodeType": "ExpressionStatement",
                      "src": "9093:57:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2697,
                              "name": "marketOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1953,
                              "src": "9199:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                                "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                              }
                            },
                            "id": 2699,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2698,
                              "name": "lastUsedOrder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2677,
                              "src": "9212:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9199:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_storage",
                              "typeString": "struct OrderBookBase.Order storage ref"
                            }
                          },
                          "id": 2700,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "orderIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1914,
                          "src": "9199:38:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2701,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2642,
                            "src": "9240:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 2702,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "orderIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1914,
                          "src": "9240:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9199:57:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2704,
                      "nodeType": "ExpressionStatement",
                      "src": "9199:57:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2705,
                              "name": "userOrders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1958,
                              "src": "9322:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                                "typeString": "mapping(address => uint256[] storage ref)"
                              }
                            },
                            "id": 2708,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2706,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2642,
                                "src": "9333:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2707,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1900,
                              "src": "9333:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9322:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 2709,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pop",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9322:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                            "typeString": "function ()"
                          }
                        },
                        "id": 2710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9322:29:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 2711,
                      "nodeType": "ExpressionStatement",
                      "src": "9322:29:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2719,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2713,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2642,
                                "src": "9399:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2714,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "orderType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1912,
                              "src": "9399:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2715,
                                "name": "order",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2642,
                                "src": "9416:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 2716,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "price",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1906,
                              "src": "9416:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2712,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3810,
                            "src": "9392:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 2717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9392:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9432:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9392:41:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 2728,
                      "nodeType": "IfStatement",
                      "src": "9388:111:1",
                      "trueBody": {
                        "id": 2727,
                        "nodeType": "Block",
                        "src": "9434:65:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2721,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2642,
                                    "src": "9458:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 2722,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "orderType",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1912,
                                  "src": "9458:15:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2723,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2642,
                                    "src": "9475:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                      "typeString": "struct OrderBookBase.Order memory"
                                    }
                                  },
                                  "id": 2724,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "price",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1906,
                                  "src": "9475:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2720,
                                "name": "delPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4331,
                                "src": "9449:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256,uint256)"
                                }
                              },
                              "id": 2725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9449:38:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2726,
                            "nodeType": "ExpressionStatement",
                            "src": "9449:38:1"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 2730,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "_removeLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2643,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2642,
                      "name": "order",
                      "nodeType": "VariableDeclaration",
                      "scope": 2730,
                      "src": "8575:18:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                        "typeString": "struct OrderBookBase.Order"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2641,
                        "name": "Order",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1915,
                        "src": "8575:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                          "typeString": "struct OrderBookBase.Order"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "8574:20:1"
                },
                "returnParameters": {
                  "id": 2644,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "8604:0:1"
                },
                "scope": 3554,
                "src": "8548:958:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2800,
                  "nodeType": "Block",
                  "src": "9649:378:1",
                  "statements": [
                    {
                      "assignments": [
                        2741,
                        2743
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2741,
                          "name": "front",
                          "nodeType": "VariableDeclaration",
                          "scope": 2800,
                          "src": "9661:10:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2740,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "9661:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 2743,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 2800,
                          "src": "9673:9:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2742,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "9673:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2755,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2744,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "9687:20:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 2746,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2745,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2732,
                                "src": "9708:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9687:31:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 2748,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2747,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2734,
                              "src": "9719:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9687:38:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2749,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "9727:19:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 2751,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2750,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2732,
                                "src": "9747:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9727:30:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 2753,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2752,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2734,
                              "src": "9758:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9727:37:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 2754,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9686:79:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "9660:105:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2758,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2756,
                          "name": "front",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2741,
                          "src": "9780:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2757,
                          "name": "rear",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2743,
                          "src": "9788:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9780:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 2799,
                      "nodeType": "IfStatement",
                      "src": "9776:244:1",
                      "trueBody": {
                        "id": 2798,
                        "nodeType": "Block",
                        "src": "9793:227:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2767,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 2759,
                                "name": "allData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2738,
                                "src": "9808:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2765,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2763,
                                      "name": "rear",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2743,
                                      "src": "9829:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2764,
                                      "name": "front",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2741,
                                      "src": "9836:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9829:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2762,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "9818:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                                    "typeString": "function (uint256) pure returns (uint256[] memory)"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 2760,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "9822:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2761,
                                    "length": null,
                                    "nodeType": "ArrayTypeName",
                                    "src": "9822:6:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                      "typeString": "uint256[]"
                                    }
                                  }
                                },
                                "id": 2766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9818:24:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "src": "9808:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 2768,
                            "nodeType": "ExpressionStatement",
                            "src": "9808:34:1"
                          },
                          {
                            "body": {
                              "id": 2796,
                              "nodeType": "Block",
                              "src": "9889:120:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2794,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 2779,
                                        "name": "allData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2738,
                                        "src": "9908:7:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 2783,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2782,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2780,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2770,
                                          "src": "9916:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2781,
                                          "name": "front",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2741,
                                          "src": "9918:5:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "9916:7:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "9908:16:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2784,
                                          "name": "marketOrders",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1953,
                                          "src": "9927:12:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                                            "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                                          }
                                        },
                                        "id": 2792,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2785,
                                                "name": "limitOrderQueueMap",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3774,
                                                "src": "9940:18:1",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                                  "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                                }
                                              },
                                              "id": 2787,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2786,
                                                "name": "direction",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2732,
                                                "src": "9959:9:1",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "9940:29:1",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                              }
                                            },
                                            "id": 2789,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 2788,
                                              "name": "price",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2734,
                                              "src": "9970:5:1",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "9940:36:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                              "typeString": "mapping(uint256 => uint256)"
                                            }
                                          },
                                          "id": 2791,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2790,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2770,
                                            "src": "9977:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "9940:39:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9927:53:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Order_$1915_storage",
                                          "typeString": "struct OrderBookBase.Order storage ref"
                                        }
                                      },
                                      "id": 2793,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "amountRemain",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1910,
                                      "src": "9927:66:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9908:85:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2795,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9908:85:1"
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 2773,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2770,
                                "src": "9876:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 2774,
                                "name": "rear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2743,
                                "src": "9878:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9876:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2797,
                            "initializationExpression": {
                              "assignments": [
                                2770
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2770,
                                  "name": "i",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2797,
                                  "src": "9862:6:1",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2769,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9862:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2772,
                              "initialValue": {
                                "argumentTypes": null,
                                "id": 2771,
                                "name": "front",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2741,
                                "src": "9869:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "9862:12:1"
                            },
                            "loopExpression": {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2777,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "9884:3:1",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 2776,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2770,
                                  "src": "9884:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2778,
                              "nodeType": "ExpressionStatement",
                              "src": "9884:3:1"
                            },
                            "nodeType": "ForStatement",
                            "src": "9857:152:1"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 2801,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "list",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2735,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2732,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2801,
                      "src": "9551:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2731,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9551:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2734,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 2801,
                      "src": "9576:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2733,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9576:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "9540:47:1"
                },
                "returnParameters": {
                  "id": 2739,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2738,
                      "name": "allData",
                      "nodeType": "VariableDeclaration",
                      "scope": 2801,
                      "src": "9626:21:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2736,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "9626:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2737,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "9626:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "9625:23:1"
                },
                "scope": 3554,
                "src": "9527:500:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2851,
                  "nodeType": "Block",
                  "src": "10167:269:1",
                  "statements": [
                    {
                      "assignments": [
                        2811,
                        2813
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2811,
                          "name": "front",
                          "nodeType": "VariableDeclaration",
                          "scope": 2851,
                          "src": "10179:10:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2810,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "10179:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 2813,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 2851,
                          "src": "10191:9:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2812,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "10191:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2825,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2814,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "10205:20:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 2816,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2815,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2803,
                                "src": "10226:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10205:31:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 2818,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2817,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2805,
                              "src": "10237:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10205:38:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2819,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "10245:19:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 2821,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2820,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2803,
                                "src": "10265:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10245:30:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 2823,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2822,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2805,
                              "src": "10276:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10245:37:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 2824,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "10204:79:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "10178:105:1"
                    },
                    {
                      "body": {
                        "id": 2849,
                        "nodeType": "Block",
                        "src": "10325:104:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 2836,
                                "name": "dataAgg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2808,
                                "src": "10340:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2837,
                                    "name": "marketOrders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1953,
                                    "src": "10351:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                                      "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                                    }
                                  },
                                  "id": 2845,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2838,
                                          "name": "limitOrderQueueMap",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3774,
                                          "src": "10364:18:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                            "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                          }
                                        },
                                        "id": 2840,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2839,
                                          "name": "direction",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2803,
                                          "src": "10383:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10364:29:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                          "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                        }
                                      },
                                      "id": 2842,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 2841,
                                        "name": "price",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2805,
                                        "src": "10394:5:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10364:36:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                        "typeString": "mapping(uint256 => uint256)"
                                      }
                                    },
                                    "id": 2844,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 2843,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2827,
                                      "src": "10401:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10364:39:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10351:53:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Order_$1915_storage",
                                    "typeString": "struct OrderBookBase.Order storage ref"
                                  }
                                },
                                "id": 2846,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amountRemain",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1910,
                                "src": "10351:66:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10340:77:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2848,
                            "nodeType": "ExpressionStatement",
                            "src": "10340:77:1"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2830,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2827,
                          "src": "10313:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2831,
                          "name": "rear",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "10315:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10313:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2850,
                      "initializationExpression": {
                        "assignments": [
                          2827
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2827,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 2850,
                            "src": "10299:6:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2826,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "10299:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2829,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 2828,
                          "name": "front",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2811,
                          "src": "10306:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10299:12:1"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "10321:3:1",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 2833,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2827,
                            "src": "10321:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2835,
                        "nodeType": "ExpressionStatement",
                        "src": "10321:3:1"
                      },
                      "nodeType": "ForStatement",
                      "src": "10294:135:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2852,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "listAgg",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2806,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2803,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2852,
                      "src": "10078:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2802,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10078:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2805,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 2852,
                      "src": "10103:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2804,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10103:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10067:47:1"
                },
                "returnParameters": {
                  "id": 2809,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2808,
                      "name": "dataAgg",
                      "nodeType": "VariableDeclaration",
                      "scope": 2852,
                      "src": "10153:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2807,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10153:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10152:14:1"
                },
                "scope": 3554,
                "src": "10051:385:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2885,
                  "nodeType": "Block",
                  "src": "10563:209:1",
                  "statements": [
                    {
                      "assignments": [
                        2860
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2860,
                          "name": "curPrice",
                          "nodeType": "VariableDeclaration",
                          "scope": 2885,
                          "src": "10574:13:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2859,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "10574:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2865,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2862,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2854,
                            "src": "10600:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10611:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2861,
                          "name": "nextPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4349,
                          "src": "10590:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 2864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10590:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "10574:39:1"
                    },
                    {
                      "body": {
                        "id": 2883,
                        "nodeType": "Block",
                        "src": "10644:121:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2874,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 2869,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2857,
                                "src": "10659:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2871,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2854,
                                    "src": "10677:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2872,
                                    "name": "curPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2860,
                                    "src": "10688:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2870,
                                  "name": "listAgg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2852,
                                  "src": "10669:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 2873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10669:28:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10659:38:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2875,
                            "nodeType": "ExpressionStatement",
                            "src": "10659:38:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 2876,
                                "name": "curPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2860,
                                "src": "10712:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2878,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2854,
                                    "src": "10733:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2879,
                                    "name": "curPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2860,
                                    "src": "10744:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2877,
                                  "name": "nextPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4349,
                                  "src": "10723:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 2880,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10723:30:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10712:41:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2882,
                            "nodeType": "ExpressionStatement",
                            "src": "10712:41:1"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2868,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2866,
                          "name": "curPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2860,
                          "src": "10630:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10642:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "10630:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2884,
                      "nodeType": "WhileStatement",
                      "src": "10624:141:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2886,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "totalOrderAmount",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2855,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2854,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2886,
                      "src": "10491:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2853,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10491:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10490:16:1"
                },
                "returnParameters": {
                  "id": 2858,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2857,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 2886,
                      "src": "10545:11:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2856,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10545:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10544:13:1"
                },
                "scope": 3554,
                "src": "10465:307:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 2975,
                  "nodeType": "Block",
                  "src": "10999:537:1",
                  "statements": [
                    {
                      "assignments": [
                        2900
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2900,
                          "name": "priceLength",
                          "nodeType": "VariableDeclaration",
                          "scope": 2975,
                          "src": "11010:16:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2899,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "11010:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2904,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2902,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2888,
                            "src": "11041:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2901,
                          "name": "priceLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4137,
                          "src": "11029:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 2903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11029:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11010:41:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2912,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2905,
                          "name": "priceLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2900,
                          "src": "11062:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2906,
                              "name": "priceLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2900,
                              "src": "11077:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2907,
                              "name": "maxSize",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2890,
                              "src": "11091:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "11077:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 2910,
                            "name": "priceLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2900,
                            "src": "11111:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "11077:45:1",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 2909,
                            "name": "maxSize",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2890,
                            "src": "11101:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11062:60:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2913,
                      "nodeType": "ExpressionStatement",
                      "src": "11062:60:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2914,
                          "name": "prices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2894,
                          "src": "11133:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2918,
                              "name": "priceLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2900,
                              "src": "11153:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "11142:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 2915,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "11146:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2916,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "11146:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 2919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11142:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "src": "11133:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 2921,
                      "nodeType": "ExpressionStatement",
                      "src": "11133:32:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 2928,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 2922,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2897,
                          "src": "11176:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2926,
                              "name": "priceLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2900,
                              "src": "11197:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "11186:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 2923,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "11190:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2924,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "11190:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 2927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11186:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "src": "11176:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 2929,
                      "nodeType": "ExpressionStatement",
                      "src": "11176:33:1"
                    },
                    {
                      "assignments": [
                        2931
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2931,
                          "name": "curPrice",
                          "nodeType": "VariableDeclaration",
                          "scope": 2975,
                          "src": "11220:13:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2930,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "11220:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2936,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2933,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2888,
                            "src": "11246:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11257:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2932,
                          "name": "nextPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4349,
                          "src": "11236:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 2935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11236:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11220:39:1"
                    },
                    {
                      "assignments": [
                        2938
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2938,
                          "name": "index",
                          "nodeType": "VariableDeclaration",
                          "scope": 2975,
                          "src": "11270:12:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "typeName": {
                            "id": 2937,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "11270:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2940,
                      "initialValue": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2939,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11285:1:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11270:16:1"
                    },
                    {
                      "body": {
                        "id": 2973,
                        "nodeType": "Block",
                        "src": "11340:189:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2952,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 2948,
                                  "name": "prices",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2894,
                                  "src": "11355:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 2950,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 2949,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2938,
                                  "src": "11362:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "11355:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 2951,
                                "name": "curPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2931,
                                "src": "11371:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11355:24:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2953,
                            "nodeType": "ExpressionStatement",
                            "src": "11355:24:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 2954,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2897,
                                  "src": "11394:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 2956,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 2955,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2938,
                                  "src": "11402:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "11394:14:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2958,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2888,
                                    "src": "11419:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2959,
                                    "name": "curPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2931,
                                    "src": "11430:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2957,
                                  "name": "listAgg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2852,
                                  "src": "11411:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 2960,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11411:28:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11394:45:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2962,
                            "nodeType": "ExpressionStatement",
                            "src": "11394:45:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2968,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 2963,
                                "name": "curPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2931,
                                "src": "11454:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2965,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2888,
                                    "src": "11475:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2966,
                                    "name": "curPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2931,
                                    "src": "11486:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2964,
                                  "name": "nextPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4349,
                                  "src": "11465:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 2967,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11465:30:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11454:41:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2969,
                            "nodeType": "ExpressionStatement",
                            "src": "11454:41:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 2971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "11510:7:1",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 2970,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2938,
                                "src": "11510:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "id": 2972,
                            "nodeType": "ExpressionStatement",
                            "src": "11510:7:1"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2941,
                            "name": "curPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2931,
                            "src": "11303:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11315:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11303:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2944,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2938,
                            "src": "11320:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2945,
                            "name": "priceLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2900,
                            "src": "11328:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11320:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11303:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2974,
                      "nodeType": "WhileStatement",
                      "src": "11297:232:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 2976,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "marketBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2891,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2888,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 2976,
                      "src": "10875:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2887,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10875:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2890,
                      "name": "maxSize",
                      "nodeType": "VariableDeclaration",
                      "scope": 2976,
                      "src": "10900:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 2889,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10900:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10864:51:1"
                },
                "returnParameters": {
                  "id": 2898,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2894,
                      "name": "prices",
                      "nodeType": "VariableDeclaration",
                      "scope": 2976,
                      "src": "10954:20:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2892,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "10954:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2893,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "10954:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2897,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 2976,
                      "src": "10976:21:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2895,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "10976:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2896,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "10976:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10953:45:1"
                },
                "scope": 3554,
                "src": "10845:691:1",
                "stateMutability": "view",
                "superFunction": 4545,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3108,
                  "nodeType": "Block",
                  "src": "11715:981:1",
                  "statements": [
                    {
                      "assignments": [
                        2990
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2990,
                          "name": "curPrice",
                          "nodeType": "VariableDeclaration",
                          "scope": 3108,
                          "src": "11726:13:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2989,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "11726:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2995,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2992,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2978,
                            "src": "11752:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2993,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11763:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2991,
                          "name": "nextPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4349,
                          "src": "11742:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256)"
                          }
                        },
                        "id": 2994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11742:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11726:39:1"
                    },
                    {
                      "assignments": [
                        2997
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2997,
                          "name": "priceLength",
                          "nodeType": "VariableDeclaration",
                          "scope": 3108,
                          "src": "11776:16:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 2996,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "11776:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 2998,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11776:16:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2999,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2978,
                          "src": "11807:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3000,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4110,
                          "src": "11820:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11807:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3022,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2978,
                            "src": "12025:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3023,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4113,
                            "src": "12038:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12025:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3045,
                        "nodeType": "IfStatement",
                        "src": "12021:204:1",
                        "trueBody": {
                          "id": 3044,
                          "nodeType": "Block",
                          "src": "12050:175:1",
                          "statements": [
                            {
                              "body": {
                                "id": 3042,
                                "nodeType": "Block",
                                "src": "12106:108:1",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3037,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 3032,
                                        "name": "curPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2990,
                                        "src": "12125:8:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 3034,
                                            "name": "direction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2978,
                                            "src": "12146:9:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 3035,
                                            "name": "curPrice",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2990,
                                            "src": "12157:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 3033,
                                          "name": "nextPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4349,
                                          "src": "12136:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) view returns (uint256)"
                                          }
                                        },
                                        "id": 3036,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12136:30:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12125:41:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3038,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12125:41:1"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3040,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "12185:13:1",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 3039,
                                        "name": "priceLength",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2997,
                                        "src": "12185:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3041,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12185:13:1"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3031,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3027,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3025,
                                    "name": "curPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2990,
                                    "src": "12071:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3026,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12083:1:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "12071:13:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3030,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3028,
                                    "name": "curPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2990,
                                    "src": "12088:8:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 3029,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2980,
                                    "src": "12100:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "12088:17:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "12071:34:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3043,
                              "nodeType": "WhileStatement",
                              "src": "12065:149:1"
                            }
                          ]
                        }
                      },
                      "id": 3046,
                      "nodeType": "IfStatement",
                      "src": "11803:422:1",
                      "trueBody": {
                        "id": 3021,
                        "nodeType": "Block",
                        "src": "11831:175:1",
                        "statements": [
                          {
                            "body": {
                              "id": 3019,
                              "nodeType": "Block",
                              "src": "11887:108:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3014,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 3009,
                                      "name": "curPrice",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2990,
                                      "src": "11906:8:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3011,
                                          "name": "direction",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2978,
                                          "src": "11927:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 3012,
                                          "name": "curPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2990,
                                          "src": "11938:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3010,
                                        "name": "nextPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4349,
                                        "src": "11917:9:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3013,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11917:30:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11906:41:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3015,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11906:41:1"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3017,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "11966:13:1",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "id": 3016,
                                      "name": "priceLength",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2997,
                                      "src": "11966:11:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3018,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11966:13:1"
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3004,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3002,
                                  "name": "curPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2990,
                                  "src": "11852:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3003,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11864:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "11852:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3007,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3005,
                                  "name": "curPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2990,
                                  "src": "11869:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3006,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2980,
                                  "src": "11881:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "11869:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "11852:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 3020,
                            "nodeType": "WhileStatement",
                            "src": "11846:149:1"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3047,
                          "name": "priceLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2997,
                          "src": "12241:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3048,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12255:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12241:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3107,
                      "nodeType": "IfStatement",
                      "src": "12237:452:1",
                      "trueBody": {
                        "id": 3106,
                        "nodeType": "Block",
                        "src": "12258:431:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3056,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3050,
                                "name": "prices",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2984,
                                "src": "12273:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3054,
                                    "name": "priceLength",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2997,
                                    "src": "12293:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3053,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "12282:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                                    "typeString": "function (uint256) pure returns (uint256[] memory)"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 3051,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "12286:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3052,
                                    "length": null,
                                    "nodeType": "ArrayTypeName",
                                    "src": "12286:6:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                      "typeString": "uint256[]"
                                    }
                                  }
                                },
                                "id": 3055,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12282:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "src": "12273:32:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 3057,
                            "nodeType": "ExpressionStatement",
                            "src": "12273:32:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3058,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2987,
                                "src": "12320:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3062,
                                    "name": "priceLength",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2997,
                                    "src": "12341:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3061,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "12330:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                                    "typeString": "function (uint256) pure returns (uint256[] memory)"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 3059,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "12334:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3060,
                                    "length": null,
                                    "nodeType": "ArrayTypeName",
                                    "src": "12334:6:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                      "typeString": "uint256[]"
                                    }
                                  }
                                },
                                "id": 3063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12330:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "src": "12320:33:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 3065,
                            "nodeType": "ExpressionStatement",
                            "src": "12320:33:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3066,
                                "name": "curPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2990,
                                "src": "12368:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3068,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2978,
                                    "src": "12389:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3069,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12400:1:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 3067,
                                  "name": "nextPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4349,
                                  "src": "12379:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 3070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12379:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "12368:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3072,
                            "nodeType": "ExpressionStatement",
                            "src": "12368:34:1"
                          },
                          {
                            "assignments": [
                              3074
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 3074,
                                "name": "index",
                                "nodeType": "VariableDeclaration",
                                "scope": 3106,
                                "src": "12417:10:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3073,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12417:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 3075,
                            "initialValue": null,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "12417:10:1"
                          },
                          {
                            "body": {
                              "id": 3104,
                              "nodeType": "Block",
                              "src": "12469:209:1",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3083,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 3079,
                                        "name": "prices",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2984,
                                        "src": "12488:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 3081,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 3080,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3074,
                                        "src": "12495:5:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "12488:13:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "id": 3082,
                                      "name": "curPrice",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2990,
                                      "src": "12504:8:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "12488:24:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3084,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12488:24:1"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3092,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 3085,
                                        "name": "amounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2987,
                                        "src": "12531:7:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 3087,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 3086,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3074,
                                        "src": "12539:5:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "12531:14:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3089,
                                          "name": "direction",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2978,
                                          "src": "12556:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 3090,
                                          "name": "curPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2990,
                                          "src": "12567:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3088,
                                        "name": "listAgg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2852,
                                        "src": "12548:7:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3091,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "12548:28:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "12531:45:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3093,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12531:45:1"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3099,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 3094,
                                      "name": "curPrice",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2990,
                                      "src": "12595:8:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3096,
                                          "name": "direction",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2978,
                                          "src": "12616:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 3097,
                                          "name": "curPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2990,
                                          "src": "12627:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3095,
                                        "name": "nextPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4349,
                                        "src": "12606:9:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3098,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "12606:30:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "12595:41:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3100,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12595:41:1"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3102,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "12655:7:1",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "id": 3101,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3074,
                                      "src": "12655:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 3103,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12655:7:1"
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 3076,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3074,
                                "src": "12448:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3077,
                                "name": "priceLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2997,
                                "src": "12456:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "12448:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 3105,
                            "nodeType": "WhileStatement",
                            "src": "12442:236:1"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 3109,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "rangeBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 2981,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2978,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3109,
                      "src": "11604:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2977,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11604:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2980,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 3109,
                      "src": "11620:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2979,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11620:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "11603:28:1"
                },
                "returnParameters": {
                  "id": 2988,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 2984,
                      "name": "prices",
                      "nodeType": "VariableDeclaration",
                      "scope": 3109,
                      "src": "11670:20:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2982,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11670:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2983,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11670:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2987,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 3109,
                      "src": "11692:21:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2985,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11692:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2986,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11692:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "11669:45:1"
                },
                "scope": 3554,
                "src": "11585:1111:1",
                "stateMutability": "view",
                "superFunction": 4558,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3193,
                  "nodeType": "Block",
                  "src": "12833:358:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3117,
                          "name": "order",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3115,
                          "src": "12844:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "38",
                              "id": 3121,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12863:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              }
                            ],
                            "id": 3120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "12852:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 3118,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "12856:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3119,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "12856:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 3122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12852:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "src": "12844:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 3124,
                      "nodeType": "ExpressionStatement",
                      "src": "12844:21:1"
                    },
                    {
                      "assignments": [
                        3126
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3126,
                          "name": "o",
                          "nodeType": "VariableDeclaration",
                          "scope": 3193,
                          "src": "12876:14:1",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                            "typeString": "struct OrderBookBase.Order"
                          },
                          "typeName": {
                            "contractScope": null,
                            "id": 3125,
                            "name": "Order",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 1915,
                            "src": "12876:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_storage_ptr",
                              "typeString": "struct OrderBookBase.Order"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3130,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3127,
                          "name": "marketOrders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1953,
                          "src": "12893:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Order_$1915_storage_$",
                            "typeString": "mapping(uint256 => struct OrderBookBase.Order storage ref)"
                          }
                        },
                        "id": 3129,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3128,
                          "name": "orderId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3111,
                          "src": "12906:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12893:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Order_$1915_storage",
                          "typeString": "struct OrderBookBase.Order storage ref"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12876:38:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3131,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "12925:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3133,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12931:1:1",
                            "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": "12925:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3136,
                                "name": "o",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3126,
                                "src": "12943:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 3137,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1900,
                              "src": "12943:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 3134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12937:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint"
                              }
                            ],
                            "id": 3135,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12936:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          },
                          "id": 3138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12936:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12925:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3140,
                      "nodeType": "ExpressionStatement",
                      "src": "12925:26:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3141,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "12962:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3143,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12968:1:1",
                            "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": "12962:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3146,
                                "name": "o",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3126,
                                "src": "12980:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                                  "typeString": "struct OrderBookBase.Order memory"
                                }
                              },
                              "id": 3147,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "to",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1902,
                              "src": "12980:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 3144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12974:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint"
                              }
                            ],
                            "id": 3145,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12973:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          },
                          "id": 3148,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12973:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12962:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3150,
                      "nodeType": "ExpressionStatement",
                      "src": "12962:23:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3151,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "12996:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3153,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 3152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13002:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "12996:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3154,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3126,
                            "src": "13007:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 3155,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "orderId",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1904,
                          "src": "13007:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12996:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3157,
                      "nodeType": "ExpressionStatement",
                      "src": "12996:20:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3158,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "13027:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3160,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 3159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13033:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "13027:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3161,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3126,
                            "src": "13038:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 3162,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "price",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1906,
                          "src": "13038:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13027:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3164,
                      "nodeType": "ExpressionStatement",
                      "src": "13027:18:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3165,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "13056:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3167,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 3166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13062:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "13056:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3168,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3126,
                            "src": "13067:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 3169,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amountOffer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1908,
                          "src": "13067:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13056:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3171,
                      "nodeType": "ExpressionStatement",
                      "src": "13056:24:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3172,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "13091:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3174,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 3173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13097:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "13091:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3175,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3126,
                            "src": "13102:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 3176,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amountRemain",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1910,
                          "src": "13102:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13091:25:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3178,
                      "nodeType": "ExpressionStatement",
                      "src": "13091:25:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3184,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3179,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "13127:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3181,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "36",
                            "id": 3180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13133:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_6_by_1",
                              "typeString": "int_const 6"
                            },
                            "value": "6"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "13127:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3182,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3126,
                            "src": "13138:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 3183,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "orderType",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1912,
                          "src": "13138:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13127:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3185,
                      "nodeType": "ExpressionStatement",
                      "src": "13127:22:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3186,
                            "name": "order",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "13160:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 3188,
                          "indexExpression": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 3187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13166:1:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "13160:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3189,
                            "name": "o",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3126,
                            "src": "13171:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Order_$1915_memory_ptr",
                              "typeString": "struct OrderBookBase.Order memory"
                            }
                          },
                          "id": 3190,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "orderIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1914,
                          "src": "13171:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13160:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3192,
                      "nodeType": "ExpressionStatement",
                      "src": "13160:23:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3194,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "marketOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3112,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3111,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 3194,
                      "src": "12755:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3110,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "12755:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "12744:30:1"
                },
                "returnParameters": {
                  "id": 3116,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3115,
                      "name": "order",
                      "nodeType": "VariableDeclaration",
                      "scope": 3194,
                      "src": "12813:19:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3113,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "12813:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3114,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "12813:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "12812:21:1"
                },
                "scope": 3554,
                "src": "12724:467:1",
                "stateMutability": "view",
                "superFunction": 4532,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3220,
                  "nodeType": "Block",
                  "src": "13367:93:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3211,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3206,
                          "name": "next",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "13378:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3208,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3196,
                              "src": "13395:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3209,
                              "name": "cur",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3198,
                              "src": "13406:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3207,
                            "name": "nextPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4349,
                            "src": "13385:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13385:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13378:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3212,
                      "nodeType": "ExpressionStatement",
                      "src": "13378:32:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3213,
                          "name": "amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3204,
                          "src": "13421:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3215,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3196,
                              "src": "13436:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3216,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3201,
                              "src": "13447:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3214,
                            "name": "list",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2801,
                            "src": "13431:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256,uint256) view returns (uint256[] memory)"
                            }
                          },
                          "id": 3217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13431:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "src": "13421:31:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 3219,
                      "nodeType": "ExpressionStatement",
                      "src": "13421:31:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3221,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "nextOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3199,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3196,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3221,
                      "src": "13260:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3195,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13260:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3198,
                      "name": "cur",
                      "nodeType": "VariableDeclaration",
                      "scope": 3221,
                      "src": "13285:8:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3197,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13285:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13249:45:1"
                },
                "returnParameters": {
                  "id": 3205,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3201,
                      "name": "next",
                      "nodeType": "VariableDeclaration",
                      "scope": 3221,
                      "src": "13333:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3200,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13333:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3204,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 3221,
                      "src": "13344:21:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 3202,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "13344:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3203,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "13344:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13332:34:1"
                },
                "scope": 3554,
                "src": "13231:229:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3246,
                  "nodeType": "Block",
                  "src": "13628:95:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3232,
                          "name": "next",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3228,
                          "src": "13639:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3234,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3223,
                              "src": "13656:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3235,
                              "name": "cur",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3225,
                              "src": "13667:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3233,
                            "name": "nextPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4349,
                            "src": "13646:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13646:25:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13639:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3238,
                      "nodeType": "ExpressionStatement",
                      "src": "13639:32:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3239,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3230,
                          "src": "13682:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3241,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3223,
                              "src": "13699:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3242,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3228,
                              "src": "13710:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3240,
                            "name": "listAgg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2852,
                            "src": "13691:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13691:24:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13682:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3245,
                      "nodeType": "ExpressionStatement",
                      "src": "13682:33:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3247,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "nextBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3226,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3223,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3247,
                      "src": "13531:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3222,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13531:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3225,
                      "name": "cur",
                      "nodeType": "VariableDeclaration",
                      "scope": 3247,
                      "src": "13556:8:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3224,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13556:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13520:45:1"
                },
                "returnParameters": {
                  "id": 3231,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3228,
                      "name": "next",
                      "nodeType": "VariableDeclaration",
                      "scope": 3247,
                      "src": "13604:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3227,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13604:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3230,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 3247,
                      "src": "13615:11:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3229,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13615:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13603:24:1"
                },
                "scope": 3554,
                "src": "13503:220:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3272,
                  "nodeType": "Block",
                  "src": "13857:96:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3263,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3258,
                          "name": "next",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3254,
                          "src": "13868:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3260,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3249,
                              "src": "13886:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3261,
                              "name": "cur",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3251,
                              "src": "13897:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3259,
                            "name": "nextPrice2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4380,
                            "src": "13875:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13875:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13868:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3264,
                      "nodeType": "ExpressionStatement",
                      "src": "13868:33:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3265,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3256,
                          "src": "13912:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3267,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3249,
                              "src": "13929:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3268,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3254,
                              "src": "13940:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3266,
                            "name": "listAgg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2852,
                            "src": "13921:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13921:24:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13912:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3271,
                      "nodeType": "ExpressionStatement",
                      "src": "13912:33:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3273,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "nextBook2",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3252,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3249,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3273,
                      "src": "13760:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3248,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13760:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3251,
                      "name": "cur",
                      "nodeType": "VariableDeclaration",
                      "scope": 3273,
                      "src": "13785:8:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3250,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13785:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13749:45:1"
                },
                "returnParameters": {
                  "id": 3257,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3254,
                      "name": "next",
                      "nodeType": "VariableDeclaration",
                      "scope": 3273,
                      "src": "13833:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3253,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13833:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3256,
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 3273,
                      "src": "13844:11:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3255,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13844:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13832:24:1"
                },
                "scope": 3554,
                "src": "13731:222:1",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3315,
                  "nodeType": "Block",
                  "src": "14081:292:1",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3280,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7293,
                            "src": "14096:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14096:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3284,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1929,
                              "src": "14136:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3282,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "14110:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 3283,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAdmin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5430,
                            "src": "14110:25:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                              "typeString": "function (address) view returns (address)"
                            }
                          },
                          "id": 3285,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14110:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14096:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3303,
                      "nodeType": "IfStatement",
                      "src": "14092:180:1",
                      "trueBody": {
                        "id": 3302,
                        "nodeType": "Block",
                        "src": "14145:127:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 3298,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3292,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3289,
                                          "name": "LIMIT_BUY",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4110,
                                          "src": "14180:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3288,
                                        "name": "priceLength",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4137,
                                        "src": "14168:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3290,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14168:22:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 3291,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14194:1:1",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "14168:27:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3297,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3294,
                                          "name": "LIMIT_SELL",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4113,
                                          "src": "14211:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3293,
                                        "name": "priceLength",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4137,
                                        "src": "14199:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3295,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14199:23:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 3296,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14226:1:1",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "14199:28:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "14168:59:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "4f72646572204578697374",
                                  "id": 3299,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14246:13:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_a690f9edbb9c5ad8df187417c4886431b683ca85e05e0b844484af61516aa3c4",
                                    "typeString": "literal_string \"Order Exist\""
                                  },
                                  "value": "Order Exist"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_a690f9edbb9c5ad8df187417c4886431b683ca85e05e0b844484af61516aa3c4",
                                    "typeString": "literal_string \"Order Exist\""
                                  }
                                ],
                                "id": 3287,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "14160:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 3300,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14160:100:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3301,
                            "nodeType": "ExpressionStatement",
                            "src": "14160:100:1"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3305,
                              "name": "newPriceStep",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3275,
                              "src": "14290:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 3306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14306:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "14290:17:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5072696365205374657020496e76616c6964",
                            "id": 3308,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14309:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_8177522a9e75715a91176554b71d6f04437cf75cd4d04373d8c3c1eb35bd6a7b",
                              "typeString": "literal_string \"Price Step Invalid\""
                            },
                            "value": "Price Step Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_8177522a9e75715a91176554b71d6f04437cf75cd4d04373d8c3c1eb35bd6a7b",
                              "typeString": "literal_string \"Price Step Invalid\""
                            }
                          ],
                          "id": 3304,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "14282:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3309,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14282:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3310,
                      "nodeType": "ExpressionStatement",
                      "src": "14282:48:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3311,
                          "name": "priceStep",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "14341:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 3312,
                          "name": "newPriceStep",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3275,
                          "src": "14353:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14341:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3314,
                      "nodeType": "ExpressionStatement",
                      "src": "14341:24:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3316,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 3278,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 3277,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "14076:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "14076:4:1"
                  }
                ],
                "name": "priceStepUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3276,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3275,
                      "name": "newPriceStep",
                      "nodeType": "VariableDeclaration",
                      "scope": 3316,
                      "src": "14048:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3274,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14048:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "14047:19:1"
                },
                "returnParameters": {
                  "id": 3279,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "14081:0:1"
                },
                "scope": 3554,
                "src": "14023:350:1",
                "stateMutability": "nonpayable",
                "superFunction": 4615,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3358,
                  "nodeType": "Block",
                  "src": "14465:292:1",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3323,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7293,
                            "src": "14480:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14480:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3327,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1929,
                              "src": "14520:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3325,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "14494:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 3326,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAdmin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5430,
                            "src": "14494:25:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                              "typeString": "function (address) view returns (address)"
                            }
                          },
                          "id": 3328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14494:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14480:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3346,
                      "nodeType": "IfStatement",
                      "src": "14476:180:1",
                      "trueBody": {
                        "id": 3345,
                        "nodeType": "Block",
                        "src": "14529:127:1",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 3341,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3335,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3332,
                                          "name": "LIMIT_BUY",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4110,
                                          "src": "14564:9:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3331,
                                        "name": "priceLength",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4137,
                                        "src": "14552:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3333,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14552:22:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 3334,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14578:1:1",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "14552:27:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3340,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3337,
                                          "name": "LIMIT_SELL",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4113,
                                          "src": "14595:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 3336,
                                        "name": "priceLength",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4137,
                                        "src": "14583:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 3338,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14583:23:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 3339,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14610:1:1",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "14583:28:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "14552:59:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "4f72646572204578697374",
                                  "id": 3342,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14630:13:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_a690f9edbb9c5ad8df187417c4886431b683ca85e05e0b844484af61516aa3c4",
                                    "typeString": "literal_string \"Order Exist\""
                                  },
                                  "value": "Order Exist"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_a690f9edbb9c5ad8df187417c4886431b683ca85e05e0b844484af61516aa3c4",
                                    "typeString": "literal_string \"Order Exist\""
                                  }
                                ],
                                "id": 3330,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "14544:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 3343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14544:100:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3344,
                            "nodeType": "ExpressionStatement",
                            "src": "14544:100:1"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3348,
                              "name": "newMinAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3318,
                              "src": "14674:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 3349,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14690:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "14674:17:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4d696e20416d6f756e7420496e76616c6964",
                            "id": 3351,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14693:20:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_2f10352b541e3c39f3f568aed5493b4788c2105bcec882932be87715c87cccfc",
                              "typeString": "literal_string \"Min Amount Invalid\""
                            },
                            "value": "Min Amount Invalid"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_2f10352b541e3c39f3f568aed5493b4788c2105bcec882932be87715c87cccfc",
                              "typeString": "literal_string \"Min Amount Invalid\""
                            }
                          ],
                          "id": 3347,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "14666:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14666:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3353,
                      "nodeType": "ExpressionStatement",
                      "src": "14666:48:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3354,
                          "name": "minAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1935,
                          "src": "14725:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 3355,
                          "name": "newMinAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3318,
                          "src": "14737:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14725:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3357,
                      "nodeType": "ExpressionStatement",
                      "src": "14725:24:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3359,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 3321,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 3320,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "14460:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "14460:4:1"
                  }
                ],
                "name": "minAmountUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3319,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3318,
                      "name": "newMinAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 3359,
                      "src": "14432:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3317,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14432:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "14431:19:1"
                },
                "returnParameters": {
                  "id": 3322,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "14465:0:1"
                },
                "scope": 3554,
                "src": "14407:350:1",
                "stateMutability": "nonpayable",
                "superFunction": 4625,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3388,
                  "nodeType": "Block",
                  "src": "14936:248:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3367,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "14955:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "14955:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3371,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "14995:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3369,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "14969:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 3370,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAdmin",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5430,
                                "src": "14969:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address) view returns (address)"
                                }
                              },
                              "id": 3372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14969:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "14955:48:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "466f7262696464656e",
                            "id": 3374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15018:11:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_479a1d8ebbddc9de30fd1886cb8a7ee233eac86d9b8bd3ece8b03587030879ef",
                              "typeString": "literal_string \"Forbidden\""
                            },
                            "value": "Forbidden"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_479a1d8ebbddc9de30fd1886cb8a7ee233eac86d9b8bd3ece8b03587030879ef",
                              "typeString": "literal_string \"Forbidden\""
                            }
                          ],
                          "id": 3366,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "14947:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3375,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14947:83:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3376,
                      "nodeType": "ExpressionStatement",
                      "src": "14947:83:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3378,
                              "name": "newProtocolFeeRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3361,
                              "src": "15049:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3330",
                              "id": 3379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15071:2:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_30_by_1",
                                "typeString": "int_const 30"
                              },
                              "value": "30"
                            },
                            "src": "15049:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "496e76616c6964204665652052617465",
                            "id": 3381,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15075:18:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7d735e2e20c6f246dcbd43774e32a602ce2daf2b5bd9649cbf00598cac4c028c",
                              "typeString": "literal_string \"Invalid Fee Rate\""
                            },
                            "value": "Invalid Fee Rate"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_7d735e2e20c6f246dcbd43774e32a602ce2daf2b5bd9649cbf00598cac4c028c",
                              "typeString": "literal_string \"Invalid Fee Rate\""
                            }
                          ],
                          "id": 3377,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "15041:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15041:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3383,
                      "nodeType": "ExpressionStatement",
                      "src": "15041:53:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3384,
                          "name": "protocolFeeRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1947,
                          "src": "15140:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 3385,
                          "name": "newProtocolFeeRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3361,
                          "src": "15158:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15140:36:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3387,
                      "nodeType": "ExpressionStatement",
                      "src": "15140:36:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3389,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 3364,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 3363,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "14931:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "14931:4:1"
                  }
                ],
                "name": "protocolFeeRateUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3362,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3361,
                      "name": "newProtocolFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 3389,
                      "src": "14897:23:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3360,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14897:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "14896:25:1"
                },
                "returnParameters": {
                  "id": 3365,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "14936:0:1"
                },
                "scope": 3554,
                "src": "14866:318:1",
                "stateMutability": "nonpayable",
                "superFunction": 4630,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3418,
                  "nodeType": "Block",
                  "src": "15289:231:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3397,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "15308:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "15308:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3401,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "15348:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3399,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "15322:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 3400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAdmin",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5430,
                                "src": "15322:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address) view returns (address)"
                                }
                              },
                              "id": 3402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15322:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "15308:48:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "466f7262696464656e",
                            "id": 3404,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15358:11:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_479a1d8ebbddc9de30fd1886cb8a7ee233eac86d9b8bd3ece8b03587030879ef",
                              "typeString": "literal_string \"Forbidden\""
                            },
                            "value": "Forbidden"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_479a1d8ebbddc9de30fd1886cb8a7ee233eac86d9b8bd3ece8b03587030879ef",
                              "typeString": "literal_string \"Forbidden\""
                            }
                          ],
                          "id": 3396,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "15300:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15300:70:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3406,
                      "nodeType": "ExpressionStatement",
                      "src": "15300:70:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3408,
                              "name": "newSubsidyFeeRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3391,
                              "src": "15389:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "313030",
                              "id": 3409,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15410:3:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              },
                              "value": "100"
                            },
                            "src": "15389:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "496e76616c6964204665652052617465",
                            "id": 3411,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15415:18:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7d735e2e20c6f246dcbd43774e32a602ce2daf2b5bd9649cbf00598cac4c028c",
                              "typeString": "literal_string \"Invalid Fee Rate\""
                            },
                            "value": "Invalid Fee Rate"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_7d735e2e20c6f246dcbd43774e32a602ce2daf2b5bd9649cbf00598cac4c028c",
                              "typeString": "literal_string \"Invalid Fee Rate\""
                            }
                          ],
                          "id": 3407,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "15381:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15381:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3413,
                      "nodeType": "ExpressionStatement",
                      "src": "15381:53:1"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3414,
                          "name": "subsidyFeeRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1949,
                          "src": "15478:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 3415,
                          "name": "newSubsidyFeeRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3391,
                          "src": "15495:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15478:34:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3417,
                      "nodeType": "ExpressionStatement",
                      "src": "15478:34:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3419,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 3394,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 3393,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "15284:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "15284:4:1"
                  }
                ],
                "name": "subsidyFeeRateUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3392,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3391,
                      "name": "newSubsidyFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 3419,
                      "src": "15251:22:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3390,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15251:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "15250:24:1"
                },
                "returnParameters": {
                  "id": 3395,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "15289:0:1"
                },
                "scope": 3554,
                "src": "15221:299:1",
                "stateMutability": "nonpayable",
                "superFunction": 4635,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3533,
                  "nodeType": "Block",
                  "src": "15668:845:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3429,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "15687:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "15687:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3433,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "15727:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3431,
                                  "name": "OrderBookLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6729,
                                  "src": "15701:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                    "typeString": "type(library OrderBookLibrary)"
                                  }
                                },
                                "id": 3432,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getAdmin",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5430,
                                "src": "15701:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                                  "typeString": "function (address) view returns (address)"
                                }
                              },
                              "id": 3434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15701:34:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "15687:48:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "466f7262696464656e",
                            "id": 3436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15737:11:1",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_479a1d8ebbddc9de30fd1886cb8a7ee233eac86d9b8bd3ece8b03587030879ef",
                              "typeString": "literal_string \"Forbidden\""
                            },
                            "value": "Forbidden"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_479a1d8ebbddc9de30fd1886cb8a7ee233eac86d9b8bd3ece8b03587030879ef",
                              "typeString": "literal_string \"Forbidden\""
                            }
                          ],
                          "id": 3428,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "15679:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15679:70:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3438,
                      "nodeType": "ExpressionStatement",
                      "src": "15679:70:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3439,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3421,
                          "src": "15764:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15781:1:1",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 3440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15773:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15773:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "15764:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3463,
                      "nodeType": "IfStatement",
                      "src": "15760:179:1",
                      "trueBody": {
                        "id": 3462,
                        "nodeType": "Block",
                        "src": "15785:154:1",
                        "statements": [
                          {
                            "assignments": [
                              3445
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 3445,
                                "name": "refundBalance",
                                "nodeType": "VariableDeclaration",
                                "scope": 3462,
                                "src": "15800:18:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3444,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15800:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 3450,
                            "initialValue": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3447,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7335,
                                    "src": "15829:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                      "typeString": "contract OrderBookBase"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                      "typeString": "contract OrderBookBase"
                                    }
                                  ],
                                  "id": 3446,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15821:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 3448,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15821:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "15821:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "15800:42:1"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 3451,
                                "name": "refundBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3445,
                                "src": "15861:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 3452,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15877:1:1",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "15861:17:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 3460,
                            "nodeType": "IfStatement",
                            "src": "15857:49:1",
                            "trueBody": {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3457,
                                    "name": "refundBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3445,
                                    "src": "15892:13:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3454,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3423,
                                    "src": "15880:2:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 3456,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "15880:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 3458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15880:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3459,
                              "nodeType": "ExpressionStatement",
                              "src": "15880:26:1"
                            }
                          },
                          {
                            "expression": null,
                            "functionReturnParameters": 3427,
                            "id": 3461,
                            "nodeType": "Return",
                            "src": "15921:7:1"
                          }
                        ]
                      }
                    },
                    {
                      "assignments": [
                        3465
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3465,
                          "name": "balance",
                          "nodeType": "VariableDeclaration",
                          "scope": 3533,
                          "src": "15951:12:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3464,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "15951:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3474,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3471,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7335,
                                "src": "15998:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                  "typeString": "contract OrderBookBase"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_OrderBookBase_$3554",
                                  "typeString": "contract OrderBookBase"
                                }
                              ],
                              "id": 3470,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15990:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15990:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3467,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3421,
                                "src": "15973:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3466,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4465,
                              "src": "15966:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$4465_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 3468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15966:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$4465",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 3469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4426,
                          "src": "15966:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 3473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15966:38:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "15951:53:1"
                    },
                    {
                      "assignments": [
                        3476
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3476,
                          "name": "refundBalance",
                          "nodeType": "VariableDeclaration",
                          "scope": 3533,
                          "src": "16015:18:1",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3475,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "16015:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3478,
                      "initialValue": {
                        "argumentTypes": null,
                        "id": 3477,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3465,
                        "src": "16036:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "16015:28:1"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3479,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3421,
                          "src": "16058:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3480,
                          "name": "baseToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1939,
                          "src": "16067:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "16058:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3500,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3421,
                            "src": "16254:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3501,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "16263:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "16254:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3521,
                        "nodeType": "IfStatement",
                        "src": "16250:181:1",
                        "trueBody": {
                          "id": 3520,
                          "nodeType": "Block",
                          "src": "16275:156:1",
                          "statements": [
                            {
                              "assignments": [
                                3504
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3504,
                                  "name": "orderBalance",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3520,
                                  "src": "16290:17:1",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3503,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16290:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3508,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3506,
                                    "name": "LIMIT_BUY",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "16327:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3505,
                                  "name": "totalOrderAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2886,
                                  "src": "16310:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) view returns (uint256)"
                                  }
                                },
                                "id": 3507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16310:27:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16290:47:1"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3509,
                                  "name": "refundBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3476,
                                  "src": "16352:13:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3512,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3510,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3465,
                                      "src": "16368:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3511,
                                      "name": "orderBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3504,
                                      "src": "16378:12:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "16368:22:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3516,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16418:1:1",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "id": 3517,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "16368:51:1",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3515,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3513,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3465,
                                      "src": "16393:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3514,
                                      "name": "orderBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3504,
                                      "src": "16403:12:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "16393:22:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16352:67:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3519,
                              "nodeType": "ExpressionStatement",
                              "src": "16352:67:1"
                            }
                          ]
                        }
                      },
                      "id": 3522,
                      "nodeType": "IfStatement",
                      "src": "16054:377:1",
                      "trueBody": {
                        "id": 3499,
                        "nodeType": "Block",
                        "src": "16078:157:1",
                        "statements": [
                          {
                            "assignments": [
                              3483
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 3483,
                                "name": "orderBalance",
                                "nodeType": "VariableDeclaration",
                                "scope": 3499,
                                "src": "16093:17:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3482,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "16093:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 3487,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3485,
                                  "name": "LIMIT_SELL",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4113,
                                  "src": "16130:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3484,
                                "name": "totalOrderAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2886,
                                "src": "16113:16:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) view returns (uint256)"
                                }
                              },
                              "id": 3486,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16113:28:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "16093:48:1"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3488,
                                "name": "refundBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3476,
                                "src": "16156:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3489,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3465,
                                    "src": "16172:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 3490,
                                    "name": "orderBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3483,
                                    "src": "16182:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16172:22:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3495,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16222:1:1",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "id": 3496,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "16172:51:1",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3494,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3492,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3465,
                                    "src": "16197:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 3493,
                                    "name": "orderBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3483,
                                    "src": "16207:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16197:22:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "16156:67:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3498,
                            "nodeType": "ExpressionStatement",
                            "src": "16156:67:1"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3523,
                          "name": "refundBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3476,
                          "src": "16447:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16463:1:1",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "16447:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3532,
                      "nodeType": "IfStatement",
                      "src": "16443:62:1",
                      "trueBody": {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3527,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3421,
                              "src": "16480:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3528,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3423,
                              "src": "16487:2:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3529,
                              "name": "refundBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3476,
                              "src": "16491:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3526,
                            "name": "_safeTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2234,
                            "src": "16466:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16466:39:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3531,
                        "nodeType": "ExpressionStatement",
                        "src": "16466:39:1"
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 3534,
                "implemented": true,
                "kind": "function",
                "modifiers": [
                  {
                    "arguments": null,
                    "id": 3426,
                    "modifierName": {
                      "argumentTypes": null,
                      "id": 3425,
                      "name": "lock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2369,
                      "src": "15663:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_modifier$__$",
                        "typeString": "modifier ()"
                      }
                    },
                    "nodeType": "ModifierInvocation",
                    "src": "15663:4:1"
                  }
                ],
                "name": "safeRefund",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3424,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3421,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 3534,
                      "src": "15619:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3420,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15619:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3423,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 3534,
                      "src": "15634:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 3422,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15634:15:1",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "15618:35:1"
                },
                "returnParameters": {
                  "id": 3427,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "15668:0:1"
                },
                "scope": 3554,
                "src": "15599:914:1",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3552,
                  "nodeType": "Block",
                  "src": "16625:106:1",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 3541,
                              "name": "reserveBase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3537,
                              "src": "16637:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3542,
                              "name": "reserveQuote",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3539,
                              "src": "16650:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            }
                          ],
                          "id": 3543,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "16636:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3546,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1931,
                              "src": "16695:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3547,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1939,
                              "src": "16701:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3548,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1941,
                              "src": "16712:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3544,
                              "name": "OrderBookLibrary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6729,
                              "src": "16666:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBookLibrary_$6729_$",
                                "typeString": "type(library OrderBookLibrary)"
                              }
                            },
                            "id": 3545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5682,
                            "src": "16666:28:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint112_$_t_uint112_$",
                              "typeString": "function (address,address,address) view returns (uint112,uint112)"
                            }
                          },
                          "id": 3549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16666:57:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "src": "16636:87:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3551,
                      "nodeType": "ExpressionStatement",
                      "src": "16636:87:1"
                    }
                  ]
                },
                "documentation": null,
                "id": 3553,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getReserves",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3535,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "16541:2:1"
                },
                "returnParameters": {
                  "id": 3540,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3537,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 3553,
                      "src": "16582:19:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3536,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "16582:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3539,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 3553,
                      "src": "16603:20:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3538,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "16603:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "16581:43:1"
                },
                "scope": 3554,
                "src": "16521:210:1",
                "stateMutability": "view",
                "superFunction": 4570,
                "visibility": "external"
              }
            ],
            "scope": 3555,
            "src": "277:16457:1"
          }
        ],
        "src": "0:16736:1"
      }
    },
    "contracts/OrderBookFactory.sol": {
      "id": 2,
      "AST": {
        "absolutePath": "contracts/OrderBookFactory.sol",
        "exportedSymbols": {
          "OrderBookFactory": [
            3764
          ]
        },
        "id": 3765,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 3556,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:2"
          },
          {
            "absolutePath": "contracts/interfaces/IUniswapV2Factory.sol",
            "file": "./interfaces/IUniswapV2Factory.sol",
            "id": 3557,
            "nodeType": "ImportDirective",
            "scope": 3765,
            "sourceUnit": 4817,
            "src": "28:44:2",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/OrderBook.sol",
            "file": "./OrderBook.sol",
            "id": 3558,
            "nodeType": "ImportDirective",
            "scope": 3765,
            "sourceUnit": 1877,
            "src": "74:25:2",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "baseContracts": [
              {
                "arguments": null,
                "baseName": {
                  "contractScope": null,
                  "id": 3559,
                  "name": "IOrderBookFactory",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4738,
                  "src": "132:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOrderBookFactory_$4738",
                    "typeString": "contract IOrderBookFactory"
                  }
                },
                "id": 3560,
                "nodeType": "InheritanceSpecifier",
                "src": "132:17:2"
              }
            ],
            "contractDependencies": [
              1876,
              4738
            ],
            "contractKind": "contract",
            "documentation": null,
            "fullyImplemented": true,
            "id": 3764,
            "linearizedBaseContracts": [
              3764,
              4738
            ],
            "name": "OrderBookFactory",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "constant": false,
                "id": 3566,
                "name": "getOrderBook",
                "nodeType": "VariableDeclaration",
                "scope": 3764,
                "src": "159:67:2",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                  "typeString": "mapping(address => mapping(address => address))"
                },
                "typeName": {
                  "id": 3565,
                  "keyType": {
                    "id": 3561,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "167:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "159:47:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                    "typeString": "mapping(address => mapping(address => address))"
                  },
                  "valueType": {
                    "id": 3564,
                    "keyType": {
                      "id": 3562,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "186:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "178:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 3563,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "197:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 3569,
                "name": "allOrderBooks",
                "nodeType": "VariableDeclaration",
                "scope": 3764,
                "src": "233:30:2",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_address_$dyn_storage",
                  "typeString": "address[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3567,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "233:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3568,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "233:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                    "typeString": "address[]"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 3571,
                "name": "pairFactory",
                "nodeType": "VariableDeclaration",
                "scope": 3764,
                "src": "270:26:2",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3570,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "270:7:2",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 3573,
                "name": "WETH",
                "nodeType": "VariableDeclaration",
                "scope": 3764,
                "src": "303:19:2",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3572,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "303:7:2",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 3587,
                "name": "OrderBookCreated",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 3586,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3575,
                      "indexed": false,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 3587,
                      "src": "364:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3574,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "364:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3577,
                      "indexed": true,
                      "name": "baseToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 3587,
                      "src": "387:25:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3576,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "387:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3579,
                      "indexed": true,
                      "name": "quoteToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 3587,
                      "src": "423:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3578,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "423:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3581,
                      "indexed": false,
                      "name": "orderBook",
                      "nodeType": "VariableDeclaration",
                      "scope": 3587,
                      "src": "460:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3580,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "460:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3583,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 3587,
                      "src": "488:4:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3582,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "488:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3585,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 3587,
                      "src": "503:4:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3584,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "503:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "353:155:2"
                },
                "src": "331:178:2"
              },
              {
                "body": {
                  "id": 3602,
                  "nodeType": "Block",
                  "src": "569:58:2",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 3594,
                              "name": "pairFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3571,
                              "src": "581:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3595,
                              "name": "WETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3573,
                              "src": "594:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 3596,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "580:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 3597,
                              "name": "_factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3589,
                              "src": "603:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3598,
                              "name": "_WETH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3591,
                              "src": "613:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 3599,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "602:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "src": "580:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3601,
                      "nodeType": "ExpressionStatement",
                      "src": "580:39:2"
                    }
                  ]
                },
                "documentation": null,
                "id": 3603,
                "implemented": true,
                "kind": "constructor",
                "modifiers": [],
                "name": "",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3592,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3589,
                      "name": "_factory",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "529:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3588,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "529:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3591,
                      "name": "_WETH",
                      "nodeType": "VariableDeclaration",
                      "scope": 3603,
                      "src": "547:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3590,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "547:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "528:33:2"
                },
                "returnParameters": {
                  "id": 3593,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "569:0:2"
                },
                "scope": 3764,
                "src": "517:110:2",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 3611,
                  "nodeType": "Block",
                  "src": "694:46:2",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3608,
                          "name": "allOrderBooks",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3569,
                          "src": "712:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 3609,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "712:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "functionReturnParameters": 3607,
                      "id": 3610,
                      "nodeType": "Return",
                      "src": "705:27:2"
                    }
                  ]
                },
                "documentation": null,
                "id": 3612,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "allOrderBookLength",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3604,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "662:2:2"
                },
                "returnParameters": {
                  "id": 3607,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3606,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 3612,
                      "src": "688:4:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3605,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "688:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "687:6:2"
                },
                "scope": 3764,
                "src": "635:105:2",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3749,
                  "nodeType": "Block",
                  "src": "878:1088:2",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3624,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3614,
                              "src": "897:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 3625,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3616,
                              "src": "910:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "897:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f463a204944454e544943414c5f414444524553534553",
                            "id": 3627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "922:25:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c7968c9e8c9e11fa49bc5ad714a2fb5afe9a7aafdc398d7b05a70924666119ce",
                              "typeString": "literal_string \"OF: IDENTICAL_ADDRESSES\""
                            },
                            "value": "OF: IDENTICAL_ADDRESSES"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_c7968c9e8c9e11fa49bc5ad714a2fb5afe9a7aafdc398d7b05a70924666119ce",
                              "typeString": "literal_string \"OF: IDENTICAL_ADDRESSES\""
                            }
                          ],
                          "id": 3623,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "889:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "889:59:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3629,
                      "nodeType": "ExpressionStatement",
                      "src": "889:59:2"
                    },
                    {
                      "assignments": [
                        3631,
                        3633
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3631,
                          "name": "token0",
                          "nodeType": "VariableDeclaration",
                          "scope": 3749,
                          "src": "960:14:2",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 3630,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "960:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 3633,
                          "name": "token1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3749,
                          "src": "976:14:2",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 3632,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "976:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3644,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3636,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3634,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3614,
                            "src": "994:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3635,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3616,
                            "src": "1006:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "994:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 3640,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3616,
                              "src": "1046:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3641,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3614,
                              "src": "1058:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 3642,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1045:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "id": 3643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "994:74:2",
                        "trueExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 3637,
                              "name": "baseToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3614,
                              "src": "1020:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3638,
                              "name": "quoteToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3616,
                              "src": "1031:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 3639,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1019:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                          "typeString": "tuple(address,address)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "959:109:2"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3646,
                              "name": "token0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3631,
                              "src": "1087:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3648,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1105:1:2",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3647,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1097:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3649,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1097:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "1087:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f463a205a45524f5f41444452455353",
                            "id": 3651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1109:18:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_e056914e8255d98c222f0f076e4b7c9752aeff84c6e1a6ab5fa86315c6e878f0",
                              "typeString": "literal_string \"OF: ZERO_ADDRESS\""
                            },
                            "value": "OF: ZERO_ADDRESS"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_e056914e8255d98c222f0f076e4b7c9752aeff84c6e1a6ab5fa86315c6e878f0",
                              "typeString": "literal_string \"OF: ZERO_ADDRESS\""
                            }
                          ],
                          "id": 3645,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1079:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1079:49:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3653,
                      "nodeType": "ExpressionStatement",
                      "src": "1079:49:2"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 3655,
                                  "name": "getOrderBook",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3566,
                                  "src": "1147:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                    "typeString": "mapping(address => mapping(address => address))"
                                  }
                                },
                                "id": 3657,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3656,
                                  "name": "token0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3631,
                                  "src": "1160:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1147:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                  "typeString": "mapping(address => address)"
                                }
                              },
                              "id": 3659,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3658,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3633,
                                "src": "1168:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1147:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3661,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1187:1:2",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3660,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1179:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1179:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "1147:42:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f463a204f524445525f424f4f4b5f455849535453",
                            "id": 3664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1191:23:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_313882696ab02ee8e832d356313f04e07278e1eb49a55beb8196e5b2e592a5a4",
                              "typeString": "literal_string \"OF: ORDER_BOOK_EXISTS\""
                            },
                            "value": "OF: ORDER_BOOK_EXISTS"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_313882696ab02ee8e832d356313f04e07278e1eb49a55beb8196e5b2e592a5a4",
                              "typeString": "literal_string \"OF: ORDER_BOOK_EXISTS\""
                            }
                          ],
                          "id": 3654,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1139:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1139:76:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3666,
                      "nodeType": "ExpressionStatement",
                      "src": "1139:76:2"
                    },
                    {
                      "assignments": [
                        3668
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3668,
                          "name": "pair",
                          "nodeType": "VariableDeclaration",
                          "scope": 3749,
                          "src": "1228:12:2",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 3667,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1228:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3676,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3673,
                            "name": "token0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3631,
                            "src": "1282:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3674,
                            "name": "token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3633,
                            "src": "1290:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3670,
                                "name": "pairFactory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3571,
                                "src": "1261:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3669,
                              "name": "IUniswapV2Factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4816,
                              "src": "1243:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUniswapV2Factory_$4816_$",
                                "typeString": "type(contract IUniswapV2Factory)"
                              }
                            },
                            "id": 3671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1243:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Factory_$4816",
                              "typeString": "contract IUniswapV2Factory"
                            }
                          },
                          "id": 3672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getPair",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4769,
                          "src": "1243:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address) view external returns (address)"
                          }
                        },
                        "id": 3675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1243:54:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1228:69:2"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3682,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 3678,
                              "name": "pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3668,
                              "src": "1316:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3680,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1332:1:2",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3679,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1324:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1324:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "1316:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4f463a20544f4b454e5f504149525f4e4f545f455849535453",
                            "id": 3683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1336:27:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ed498cc8b689a916de2c205790c74fda90ffa66452933f27b71f9b7fc04dd2c6",
                              "typeString": "literal_string \"OF: TOKEN_PAIR_NOT_EXISTS\""
                            },
                            "value": "OF: TOKEN_PAIR_NOT_EXISTS"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_ed498cc8b689a916de2c205790c74fda90ffa66452933f27b71f9b7fc04dd2c6",
                              "typeString": "literal_string \"OF: TOKEN_PAIR_NOT_EXISTS\""
                            }
                          ],
                          "id": 3677,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1308:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 3684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1308:56:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3685,
                      "nodeType": "ExpressionStatement",
                      "src": "1308:56:2"
                    },
                    {
                      "assignments": [
                        3687
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3687,
                          "name": "bytecode",
                          "nodeType": "VariableDeclaration",
                          "scope": 3749,
                          "src": "1375:21:2",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes"
                          },
                          "typeName": {
                            "id": 3686,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1375:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3692,
                      "initialValue": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3689,
                              "name": "OrderBook",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1876,
                              "src": "1404:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_OrderBook_$1876_$",
                                "typeString": "type(contract OrderBook)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_OrderBook_$1876_$",
                                "typeString": "type(contract OrderBook)"
                              }
                            ],
                            "id": 3688,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7306,
                            "src": "1399:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
                              "typeString": "function (address) pure"
                            }
                          },
                          "id": 3690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1399:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_OrderBook_$1876",
                            "typeString": "type(contract OrderBook)"
                          }
                        },
                        "id": 3691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "creationCode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1399:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1375:52:2"
                    },
                    {
                      "assignments": [
                        3694
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3694,
                          "name": "salt",
                          "nodeType": "VariableDeclaration",
                          "scope": 3749,
                          "src": "1438:12:2",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "typeName": {
                            "id": 3693,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1438:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3702,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3698,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3631,
                                "src": "1480:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3699,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3633,
                                "src": "1488:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3696,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7280,
                                "src": "1463:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 3697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1463:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 3700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1463:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 3695,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7287,
                          "src": "1453:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 3701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1453:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1438:58:2"
                    },
                    {
                      "assignments": [
                        3704
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3704,
                          "name": "orderBook",
                          "nodeType": "VariableDeclaration",
                          "scope": 3749,
                          "src": "1507:17:2",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 3703,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1507:7:2",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3705,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1507:17:2"
                    },
                    {
                      "externalReferences": [
                        {
                          "orderBook": {
                            "declaration": 3704,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1559:9:2",
                            "valueSize": 1
                          }
                        },
                        {
                          "bytecode": {
                            "declaration": 3687,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1608:8:2",
                            "valueSize": 1
                          }
                        },
                        {
                          "bytecode": {
                            "declaration": 3687,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1587:8:2",
                            "valueSize": 1
                          }
                        },
                        {
                          "salt": {
                            "declaration": 3694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1619:4:2",
                            "valueSize": 1
                          }
                        }
                      ],
                      "id": 3706,
                      "nodeType": "InlineAssembly",
                      "operations": "{\n    orderBook := create2(0, add(bytecode, 32), mload(bytecode), salt)\n}",
                      "src": "1535:100:2"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3711,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3668,
                            "src": "1678:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3712,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3614,
                            "src": "1684:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3713,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3616,
                            "src": "1695:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3714,
                            "name": "priceStep",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3618,
                            "src": "1707:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3715,
                            "name": "minAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3620,
                            "src": "1718:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3708,
                                "name": "orderBook",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3704,
                                "src": "1656:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3707,
                              "name": "IOrderBook",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4679,
                              "src": "1645:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IOrderBook_$4679_$",
                                "typeString": "type(contract IOrderBook)"
                              }
                            },
                            "id": 3709,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1645:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IOrderBook_$4679",
                              "typeString": "contract IOrderBook"
                            }
                          },
                          "id": 3710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "initialize",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4480,
                          "src": "1645:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,address,uint256,uint256) external"
                          }
                        },
                        "id": 3716,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1645:83:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3717,
                      "nodeType": "ExpressionStatement",
                      "src": "1645:83:2"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 3718,
                                  "name": "getOrderBook",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3566,
                                  "src": "1740:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                    "typeString": "mapping(address => mapping(address => address))"
                                  }
                                },
                                "id": 3721,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3719,
                                  "name": "token0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3631,
                                  "src": "1753:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1740:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                  "typeString": "mapping(address => address)"
                                }
                              },
                              "id": 3722,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3720,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3633,
                                "src": "1761:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "1740:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 3723,
                                  "name": "getOrderBook",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3566,
                                  "src": "1770:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                    "typeString": "mapping(address => mapping(address => address))"
                                  }
                                },
                                "id": 3725,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3724,
                                  "name": "token1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3633,
                                  "src": "1783:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1770:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                  "typeString": "mapping(address => address)"
                                }
                              },
                              "id": 3727,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3726,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3631,
                                "src": "1791:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "1770:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 3728,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "1739:60:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 3729,
                              "name": "orderBook",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3704,
                              "src": "1803:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3730,
                              "name": "orderBook",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3704,
                              "src": "1814:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 3731,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1802:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "src": "1739:85:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3733,
                      "nodeType": "ExpressionStatement",
                      "src": "1739:85:2"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3737,
                            "name": "orderBook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3704,
                            "src": "1854:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3734,
                            "name": "allOrderBooks",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3569,
                            "src": "1835:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage",
                              "typeString": "address[] storage ref"
                            }
                          },
                          "id": 3736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "push",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1835:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) returns (uint256)"
                          }
                        },
                        "id": 3738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1835:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3739,
                      "nodeType": "ExpressionStatement",
                      "src": "1835:29:2"
                    },
                    {
                      "eventCall": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3741,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3668,
                            "src": "1897:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3742,
                            "name": "baseToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3614,
                            "src": "1903:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3743,
                            "name": "quoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3616,
                            "src": "1914:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3744,
                            "name": "orderBook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3704,
                            "src": "1926:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3745,
                            "name": "priceStep",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3618,
                            "src": "1937:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3746,
                            "name": "minAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3620,
                            "src": "1948:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 3740,
                          "name": "OrderBookCreated",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            3587
                          ],
                          "referencedDeclaration": 3587,
                          "src": "1880:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,address,address,uint256,uint256)"
                          }
                        },
                        "id": 3747,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1880:78:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 3748,
                      "nodeType": "EmitStatement",
                      "src": "1875:83:2"
                    }
                  ]
                },
                "documentation": null,
                "id": 3750,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "createOrderBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3621,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3614,
                      "name": "baseToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 3750,
                      "src": "798:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3613,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "798:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3616,
                      "name": "quoteToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 3750,
                      "src": "817:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3615,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "817:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3618,
                      "name": "priceStep",
                      "nodeType": "VariableDeclaration",
                      "scope": 3750,
                      "src": "837:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3617,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "837:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3620,
                      "name": "minAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 3750,
                      "src": "853:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3619,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "853:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "797:71:2"
                },
                "returnParameters": {
                  "id": 3622,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "878:0:2"
                },
                "scope": 3764,
                "src": "773:1193:2",
                "stateMutability": "nonpayable",
                "superFunction": 4732,
                "visibility": "external"
              },
              {
                "body": {
                  "id": 3762,
                  "nodeType": "Block",
                  "src": "2029:65:2",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3757,
                                  "name": "OrderBook",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1876,
                                  "src": "2062:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBook_$1876_$",
                                    "typeString": "type(contract OrderBook)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_contract$_OrderBook_$1876_$",
                                    "typeString": "type(contract OrderBook)"
                                  }
                                ],
                                "id": 3756,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7306,
                                "src": "2057:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
                                  "typeString": "function (address) pure"
                                }
                              },
                              "id": 3758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2057:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_contract$_OrderBook_$1876",
                                "typeString": "type(contract OrderBook)"
                              }
                            },
                            "id": 3759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "creationCode",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2057:28:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 3755,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7287,
                          "src": "2047:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 3760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2047:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "functionReturnParameters": 3754,
                      "id": 3761,
                      "nodeType": "Return",
                      "src": "2040:46:2"
                    }
                  ]
                },
                "documentation": null,
                "id": 3763,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getCodeHash",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3751,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1994:2:2"
                },
                "returnParameters": {
                  "id": 3754,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3753,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 3763,
                      "src": "2020:7:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3752,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2020:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2019:9:2"
                },
                "scope": 3764,
                "src": "1974:120:2",
                "stateMutability": "pure",
                "superFunction": 4737,
                "visibility": "external"
              }
            ],
            "scope": 3765,
            "src": "103:1994:2"
          }
        ],
        "src": "0:2099:2"
      }
    },
    "contracts/OrderQueue.sol": {
      "id": 3,
      "AST": {
        "absolutePath": "contracts/OrderQueue.sol",
        "exportedSymbols": {
          "OrderQueue": [
            4105
          ]
        },
        "id": 4106,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 3766,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:3"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "contract",
            "documentation": null,
            "fullyImplemented": true,
            "id": 4105,
            "linearizedBaseContracts": [
              4105
            ],
            "name": "OrderQueue",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "constant": false,
                "id": 3774,
                "name": "limitOrderQueueMap",
                "nodeType": "VariableDeclaration",
                "scope": 4105,
                "src": "189:83:3",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                  "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                },
                "typeName": {
                  "id": 3773,
                  "keyType": {
                    "id": 3767,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "197:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "189:55:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                    "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                  },
                  "valueType": {
                    "id": 3772,
                    "keyType": {
                      "id": 3768,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "213:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "205:38:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                    },
                    "valueType": {
                      "id": 3771,
                      "keyType": {
                        "id": 3769,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "229:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "221:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      },
                      "valueType": {
                        "id": 3770,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "237:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3780,
                "name": "limitOrderQueueFront",
                "nodeType": "VariableDeclaration",
                "scope": 4105,
                "src": "369:68:3",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                },
                "typeName": {
                  "id": 3779,
                  "keyType": {
                    "id": 3775,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "377:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "369:38:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                    "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                  },
                  "valueType": {
                    "id": 3778,
                    "keyType": {
                      "id": 3776,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "393:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "385:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                      "typeString": "mapping(uint256 => uint256)"
                    },
                    "valueType": {
                      "id": 3777,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "401:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3786,
                "name": "limitOrderQueueRear",
                "nodeType": "VariableDeclaration",
                "scope": 4105,
                "src": "534:67:3",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                },
                "typeName": {
                  "id": 3785,
                  "keyType": {
                    "id": 3781,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "542:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "534:38:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                    "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                  },
                  "valueType": {
                    "id": 3784,
                    "keyType": {
                      "id": 3782,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "558:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "550:21:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                      "typeString": "mapping(uint256 => uint256)"
                    },
                    "valueType": {
                      "id": 3783,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "566:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3809,
                  "nodeType": "Block",
                  "src": "787:121:3",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 3795,
                          "name": "limitOrderQueueLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3793,
                          "src": "798:21:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3796,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "822:19:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3798,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3797,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3788,
                                "src": "842:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "822:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3800,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3799,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3790,
                              "src": "853:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "822:37:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3801,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "862:20:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3803,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3802,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3788,
                                "src": "883:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "862:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3805,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3804,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3790,
                              "src": "894:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "862:38:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "822:78:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "798:102:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3808,
                      "nodeType": "ExpressionStatement",
                      "src": "798:102:3"
                    }
                  ]
                },
                "documentation": null,
                "id": 3810,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "length",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3791,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3788,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3810,
                      "src": "684:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3787,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "684:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3790,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 3810,
                      "src": "709:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3789,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "709:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "673:47:3"
                },
                "returnParameters": {
                  "id": 3794,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3793,
                      "name": "limitOrderQueueLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 3810,
                      "src": "759:26:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3792,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "759:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "758:28:3"
                },
                "scope": 4105,
                "src": "658:250:3",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3844,
                  "nodeType": "Block",
                  "src": "1024:178:3",
                  "statements": [
                    {
                      "assignments": [
                        3820
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3820,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 3844,
                          "src": "1035:9:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3819,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "1035:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3826,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3821,
                            "name": "limitOrderQueueRear",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3786,
                            "src": "1047:19:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                              "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                            }
                          },
                          "id": 3823,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3822,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3812,
                            "src": "1067:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1047:30:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 3825,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3824,
                          "name": "price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3814,
                          "src": "1078:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1047:37:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1035:49:3"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3827,
                                "name": "limitOrderQueueMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3774,
                                "src": "1095:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                }
                              },
                              "id": 3831,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3828,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3812,
                                "src": "1114:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1095:29:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 3832,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3829,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3814,
                              "src": "1125:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1095:36:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 3833,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3830,
                            "name": "rear",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3820,
                            "src": "1132:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "1095:42:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 3834,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3816,
                          "src": "1140:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1095:49:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3836,
                      "nodeType": "ExpressionStatement",
                      "src": "1095:49:3"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 3842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": false,
                        "src": "1155:39:3",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3837,
                              "name": "limitOrderQueueRear",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3786,
                              "src": "1155:19:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 3840,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3838,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3812,
                              "src": "1175:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1155:30:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 3841,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3839,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3814,
                            "src": "1186:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "1155:37:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3843,
                      "nodeType": "ExpressionStatement",
                      "src": "1155:39:3"
                    }
                  ]
                },
                "documentation": null,
                "id": 3845,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "push",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3817,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3812,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3845,
                      "src": "953:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3811,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "953:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3814,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 3845,
                      "src": "978:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3813,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "978:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3816,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 3845,
                      "src": "999:9:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3815,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "999:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "942:67:3"
                },
                "returnParameters": {
                  "id": 3818,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1024:0:3"
                },
                "scope": 4105,
                "src": "929:273:3",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3901,
                  "nodeType": "Block",
                  "src": "1321:349:3",
                  "statements": [
                    {
                      "assignments": [
                        3855,
                        3857
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3855,
                          "name": "front",
                          "nodeType": "VariableDeclaration",
                          "scope": 3901,
                          "src": "1333:10:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3854,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "1333:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 3857,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 3901,
                          "src": "1345:9:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3856,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "1345:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3869,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3858,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "1359:20:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3860,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3859,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3847,
                                "src": "1380:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1359:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3862,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3861,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3849,
                              "src": "1391:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1359:38:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3863,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "1399:19:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3865,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3864,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3847,
                                "src": "1419:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1399:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3867,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3866,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3849,
                              "src": "1430:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1399:37:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 3868,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1358:79:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1332:105:3"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3870,
                          "name": "front",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3855,
                          "src": "1452:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3871,
                          "name": "rear",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3857,
                          "src": "1461:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1452:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3900,
                      "nodeType": "IfStatement",
                      "src": "1448:215:3",
                      "trueBody": {
                        "id": 3899,
                        "nodeType": "Block",
                        "src": "1466:197:3",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3873,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3852,
                                "src": "1481:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 3874,
                                      "name": "limitOrderQueueMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3774,
                                      "src": "1488:18:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                        "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                      }
                                    },
                                    "id": 3876,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 3875,
                                      "name": "direction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3847,
                                      "src": "1507:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1488:29:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 3878,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3877,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3849,
                                    "src": "1518:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1488:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 3880,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3879,
                                  "name": "front",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3855,
                                  "src": "1525:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1488:43:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1481:50:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3882,
                            "nodeType": "ExpressionStatement",
                            "src": "1481:50:3"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "delete",
                              "prefix": true,
                              "src": "1546:50:3",
                              "subExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 3883,
                                      "name": "limitOrderQueueMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3774,
                                      "src": "1553:18:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                        "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                      }
                                    },
                                    "id": 3885,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 3884,
                                      "name": "direction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3847,
                                      "src": "1572:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1553:29:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 3887,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3886,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3849,
                                    "src": "1583:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1553:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 3889,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3888,
                                  "name": "front",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3855,
                                  "src": "1590:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "1553:43:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3891,
                            "nodeType": "ExpressionStatement",
                            "src": "1546:50:3"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "1611:40:3",
                              "subExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 3892,
                                    "name": "limitOrderQueueFront",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3780,
                                    "src": "1611:20:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 3895,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3893,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3847,
                                    "src": "1632:9:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1611:31:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 3896,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3894,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3849,
                                  "src": "1643:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "1611:38:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3898,
                            "nodeType": "ExpressionStatement",
                            "src": "1611:40:3"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 3902,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "pop",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3850,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3847,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3902,
                      "src": "1245:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3846,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1245:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3849,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 3902,
                      "src": "1270:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3848,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1270:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1234:47:3"
                },
                "returnParameters": {
                  "id": 3853,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3852,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 3902,
                      "src": "1310:9:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3851,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1310:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1309:11:3"
                },
                "scope": 4105,
                "src": "1222:448:3",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3942,
                  "nodeType": "Block",
                  "src": "1818:230:3",
                  "statements": [
                    {
                      "assignments": [
                        3912,
                        3914
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3912,
                          "name": "front",
                          "nodeType": "VariableDeclaration",
                          "scope": 3942,
                          "src": "1830:10:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3911,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "1830:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 3914,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 3942,
                          "src": "1842:9:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3913,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "1842:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3926,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3915,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "1856:20:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3917,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3916,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3904,
                                "src": "1877:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1856:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3919,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3918,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3906,
                              "src": "1888:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1856:38:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3920,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "1896:19:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3922,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3921,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3904,
                                "src": "1916:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1896:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3924,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3923,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3906,
                              "src": "1927:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1896:37:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 3925,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1855:79:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1829:105:3"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3927,
                          "name": "front",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3912,
                          "src": "1949:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3928,
                          "name": "rear",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3914,
                          "src": "1958:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1949:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3941,
                      "nodeType": "IfStatement",
                      "src": "1945:96:3",
                      "trueBody": {
                        "id": 3940,
                        "nodeType": "Block",
                        "src": "1964:77:3",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3938,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3930,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3909,
                                "src": "1979:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 3931,
                                      "name": "limitOrderQueueMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3774,
                                      "src": "1986:18:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                        "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                      }
                                    },
                                    "id": 3933,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 3932,
                                      "name": "direction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3904,
                                      "src": "2005:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1986:29:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 3935,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3934,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3906,
                                    "src": "2016:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1986:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 3937,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 3936,
                                  "name": "front",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3912,
                                  "src": "2023:5:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1986:43:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1979:50:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3939,
                            "nodeType": "ExpressionStatement",
                            "src": "1979:50:3"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 3943,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "peek",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3907,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3904,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3943,
                      "src": "1732:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3903,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1732:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3906,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 3943,
                      "src": "1757:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3905,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1757:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1721:47:3"
                },
                "returnParameters": {
                  "id": 3910,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3909,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 3943,
                      "src": "1807:9:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3908,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1807:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1806:11:3"
                },
                "scope": 4105,
                "src": "1708:340:3",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 3989,
                  "nodeType": "Block",
                  "src": "2240:242:3",
                  "statements": [
                    {
                      "assignments": [
                        3955,
                        3957
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 3955,
                          "name": "front",
                          "nodeType": "VariableDeclaration",
                          "scope": 3989,
                          "src": "2252:10:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3954,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2252:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 3957,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 3989,
                          "src": "2264:9:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3956,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2264:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 3969,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3958,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "2278:20:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3960,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3959,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3945,
                                "src": "2299:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2278:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3962,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3961,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3947,
                              "src": "2310:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2278:38:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3963,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "2318:19:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 3965,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3964,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3945,
                                "src": "2338:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2318:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 3967,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3966,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3947,
                              "src": "2349:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2318:37:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 3968,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2277:79:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2251:105:3"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3970,
                            "name": "front",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3955,
                            "src": "2371:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3971,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3949,
                            "src": "2377:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2371:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3973,
                          "name": "rear",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3957,
                          "src": "2386:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2371:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 3988,
                      "nodeType": "IfStatement",
                      "src": "2367:108:3",
                      "trueBody": {
                        "id": 3987,
                        "nodeType": "Block",
                        "src": "2392:83:3",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 3985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 3975,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3952,
                                "src": "2407:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 3976,
                                      "name": "limitOrderQueueMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3774,
                                      "src": "2414:18:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                        "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                      }
                                    },
                                    "id": 3978,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 3977,
                                      "name": "direction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3945,
                                      "src": "2433:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2414:29:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 3980,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 3979,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3947,
                                    "src": "2444:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2414:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 3984,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3983,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3981,
                                    "name": "front",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3955,
                                    "src": "2451:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 3982,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3949,
                                    "src": "2457:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2451:11:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2414:49:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2407:56:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3986,
                            "nodeType": "ExpressionStatement",
                            "src": "2407:56:3"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 3990,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "get",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3950,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3945,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 3990,
                      "src": "2133:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3944,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2133:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3947,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 3990,
                      "src": "2158:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3946,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2158:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3949,
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "scope": 3990,
                      "src": "2179:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3948,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2179:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2122:68:3"
                },
                "returnParameters": {
                  "id": 3953,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3952,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 3990,
                      "src": "2229:9:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3951,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2229:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2228:11:3"
                },
                "scope": 4105,
                "src": "2110:372:3",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 4103,
                  "nodeType": "Block",
                  "src": "2632:938:3",
                  "statements": [
                    {
                      "assignments": [
                        4000,
                        4002
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 4000,
                          "name": "front",
                          "nodeType": "VariableDeclaration",
                          "scope": 4103,
                          "src": "2644:10:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3999,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2644:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 4002,
                          "name": "rear",
                          "nodeType": "VariableDeclaration",
                          "scope": 4103,
                          "src": "2656:9:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 4001,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2656:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 4014,
                      "initialValue": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4003,
                                "name": "limitOrderQueueFront",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3780,
                                "src": "2670:20:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 4005,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4004,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3992,
                                "src": "2691:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2670:31:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4007,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4006,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3994,
                              "src": "2702:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2670:38:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4008,
                                "name": "limitOrderQueueRear",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3786,
                                "src": "2710:19:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 4010,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4009,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3992,
                                "src": "2730:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2710:30:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4012,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4011,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3994,
                              "src": "2741:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2710:37:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 4013,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2669:79:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2643:105:3"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4018,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 4016,
                              "name": "front",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4000,
                              "src": "2767:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4017,
                              "name": "rear",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4002,
                              "src": "2775:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2767:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "496e76616c6964207175657565",
                            "id": 4019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2781:15:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_26f7825f2e53afad236c3b0f48cf944ed4b098f61ac17985b83da0a7dacb0324",
                              "typeString": "literal_string \"Invalid queue\""
                            },
                            "value": "Invalid queue"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_26f7825f2e53afad236c3b0f48cf944ed4b098f61ac17985b83da0a7dacb0324",
                              "typeString": "literal_string \"Invalid queue\""
                            }
                          ],
                          "id": 4015,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "2759:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 4020,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2759:38:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4021,
                      "nodeType": "ExpressionStatement",
                      "src": "2759:38:3"
                    },
                    {
                      "assignments": [
                        4023
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 4023,
                          "name": "pre",
                          "nodeType": "VariableDeclaration",
                          "scope": 4103,
                          "src": "2894:8:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 4022,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2894:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 4031,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4024,
                              "name": "limitOrderQueueMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3774,
                              "src": "2905:18:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                              }
                            },
                            "id": 4026,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4025,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3992,
                              "src": "2924:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2905:29:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                              "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                            }
                          },
                          "id": 4028,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4027,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3994,
                            "src": "2935:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2905:36:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 4030,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4029,
                          "name": "front",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4000,
                          "src": "2942:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2905:43:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2894:54:3"
                    },
                    {
                      "assignments": [
                        4033
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 4033,
                          "name": "cur",
                          "nodeType": "VariableDeclaration",
                          "scope": 4103,
                          "src": "2959:8:3",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 4032,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2959:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 4035,
                      "initialValue": {
                        "argumentTypes": null,
                        "id": 4034,
                        "name": "pre",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4023,
                        "src": "2970:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2959:14:3"
                    },
                    {
                      "body": {
                        "id": 4078,
                        "nodeType": "Block",
                        "src": "3018:327:3",
                        "statements": [
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4050,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4048,
                                "name": "pre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4023,
                                "src": "3037:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4049,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3996,
                                "src": "3044:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3037:11:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 4053,
                            "nodeType": "IfStatement",
                            "src": "3033:57:3",
                            "trueBody": {
                              "id": 4052,
                              "nodeType": "Block",
                              "src": "3050:40:3",
                              "statements": [
                                {
                                  "id": 4051,
                                  "nodeType": "Break",
                                  "src": "3069:5:3"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4062,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 4054,
                                "name": "cur",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4033,
                                "src": "3106:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4055,
                                      "name": "limitOrderQueueMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3774,
                                      "src": "3112:18:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                        "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                      }
                                    },
                                    "id": 4057,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4056,
                                      "name": "direction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3992,
                                      "src": "3131:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3112:29:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 4059,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4058,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3994,
                                    "src": "3142:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3112:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 4061,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4060,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4037,
                                  "src": "3149:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3112:39:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3106:45:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4063,
                            "nodeType": "ExpressionStatement",
                            "src": "3106:45:3"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4064,
                                      "name": "limitOrderQueueMap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3774,
                                      "src": "3227:18:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                        "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                      }
                                    },
                                    "id": 4068,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4065,
                                      "name": "direction",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3992,
                                      "src": "3246:9:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3227:29:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 4069,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4066,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3994,
                                    "src": "3257:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3227:36:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 4070,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4067,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4037,
                                  "src": "3264:1:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "3227:39:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 4071,
                                "name": "pre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4023,
                                "src": "3269:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3227:45:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4073,
                            "nodeType": "ExpressionStatement",
                            "src": "3227:45:3"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 4074,
                                "name": "pre",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4023,
                                "src": "3324:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 4075,
                                "name": "cur",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4033,
                                "src": "3330:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3324:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4077,
                            "nodeType": "ExpressionStatement",
                            "src": "3324:9:3"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4042,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4037,
                          "src": "3005:1:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4043,
                          "name": "rear",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4002,
                          "src": "3007:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3005:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 4079,
                      "initializationExpression": {
                        "assignments": [
                          4037
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4037,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 4079,
                            "src": "2989:6:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4036,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "2989:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4041,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4040,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4038,
                            "name": "front",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4000,
                            "src": "2996:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4039,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3002:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2996:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2989:14:3"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "3013:3:3",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 4045,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4037,
                            "src": "3013:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4047,
                        "nodeType": "ExpressionStatement",
                        "src": "3013:3:3"
                      },
                      "nodeType": "ForStatement",
                      "src": "2984:361:3"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 4081,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3996,
                              "src": "3420:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4082,
                              "name": "cur",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4033,
                              "src": "3428:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3420:11:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "496e76616c69642064617461",
                            "id": 4084,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3433:14:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_572f6114a447449bdc659a7f37166aa023d9be832c6677aa410d20615c0f2646",
                              "typeString": "literal_string \"Invalid data\""
                            },
                            "value": "Invalid data"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_572f6114a447449bdc659a7f37166aa023d9be832c6677aa410d20615c0f2646",
                              "typeString": "literal_string \"Invalid data\""
                            }
                          ],
                          "id": 4080,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3412:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 4085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3412:36:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4086,
                      "nodeType": "ExpressionStatement",
                      "src": "3412:36:3"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4094,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "delete",
                        "prefix": true,
                        "src": "3461:50:3",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4087,
                                "name": "limitOrderQueueMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3774,
                                "src": "3468:18:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => mapping(uint256 => uint256)))"
                                }
                              },
                              "id": 4089,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4088,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3992,
                                "src": "3487:9:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3468:29:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4091,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4090,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3994,
                              "src": "3498:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3468:36:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4093,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4092,
                            "name": "front",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4000,
                            "src": "3505:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "3468:43:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4095,
                      "nodeType": "ExpressionStatement",
                      "src": "3461:50:3"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": false,
                        "src": "3522:40:3",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4096,
                              "name": "limitOrderQueueFront",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3780,
                              "src": "3522:20:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4099,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4097,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3992,
                              "src": "3543:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3522:31:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4100,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4098,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3994,
                            "src": "3554:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "3522:38:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4102,
                      "nodeType": "ExpressionStatement",
                      "src": "3522:40:3"
                    }
                  ]
                },
                "documentation": null,
                "id": 4104,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "del",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 3997,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 3992,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4104,
                      "src": "2561:14:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3991,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2561:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3994,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4104,
                      "src": "2586:10:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3993,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2586:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3996,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 4104,
                      "src": "2607:9:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3995,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2607:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2550:67:3"
                },
                "returnParameters": {
                  "id": 3998,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2632:0:3"
                },
                "scope": 4105,
                "src": "2538:1032:3",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 4106,
            "src": "28:3545:3"
          }
        ],
        "src": "0:3573:3"
      }
    },
    "contracts/PriceList.sol": {
      "id": 4,
      "AST": {
        "absolutePath": "contracts/PriceList.sol",
        "exportedSymbols": {
          "PriceList": [
            4381
          ]
        },
        "id": 4382,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 4107,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:4"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "contract",
            "documentation": null,
            "fullyImplemented": true,
            "id": 4381,
            "linearizedBaseContracts": [
              4381
            ],
            "name": "PriceList",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "constant": true,
                "id": 4110,
                "name": "LIMIT_BUY",
                "nodeType": "VariableDeclaration",
                "scope": 4381,
                "src": "54:36:4",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4108,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "54:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 4109,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "89:1:4",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                },
                "visibility": "internal"
              },
              {
                "constant": true,
                "id": 4113,
                "name": "LIMIT_SELL",
                "nodeType": "VariableDeclaration",
                "scope": 4381,
                "src": "97:37:4",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4111,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "97:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "32",
                  "id": 4112,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "133:1:4",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4119,
                "name": "limitOrderPriceListMap",
                "nodeType": "VariableDeclaration",
                "scope": 4381,
                "src": "292:69:4",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                },
                "typeName": {
                  "id": 4118,
                  "keyType": {
                    "id": 4114,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "292:38:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                    "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                  },
                  "valueType": {
                    "id": 4117,
                    "keyType": {
                      "id": 4115,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "316:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "308:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                      "typeString": "mapping(uint256 => uint256)"
                    },
                    "valueType": {
                      "id": 4116,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "324:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "private"
              },
              {
                "constant": false,
                "id": 4123,
                "name": "limitOrderPriceArrayLength",
                "nodeType": "VariableDeclaration",
                "scope": 4381,
                "src": "470:56:4",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                  "typeString": "mapping(uint256 => uint256)"
                },
                "typeName": {
                  "id": 4122,
                  "keyType": {
                    "id": 4120,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "478:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "470:21:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                    "typeString": "mapping(uint256 => uint256)"
                  },
                  "valueType": {
                    "id": 4121,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "486:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "private"
              },
              {
                "body": {
                  "id": 4136,
                  "nodeType": "Block",
                  "src": "664:75:4",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 4130,
                          "name": "priceArrayLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4128,
                          "src": "675:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4131,
                            "name": "limitOrderPriceArrayLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4123,
                            "src": "694:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4133,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4132,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4125,
                            "src": "721:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "694:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "675:56:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4135,
                      "nodeType": "ExpressionStatement",
                      "src": "675:56:4"
                    }
                  ]
                },
                "documentation": null,
                "id": 4137,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "priceLength",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4126,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4125,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4137,
                      "src": "587:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4124,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "587:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "576:26:4"
                },
                "returnParameters": {
                  "id": 4129,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4128,
                      "name": "priceArrayLength",
                      "nodeType": "VariableDeclaration",
                      "scope": 4137,
                      "src": "641:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4127,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "641:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "640:23:4"
                },
                "scope": 4381,
                "src": "556:183:4",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 4216,
                  "nodeType": "Block",
                  "src": "939:686:4",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 4148,
                              "name": "preIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4144,
                              "src": "951:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4149,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4146,
                              "src": "961:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4150,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "950:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "970:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 4152,
                                  "name": "limitOrderPriceListMap",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4119,
                                  "src": "973:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                    "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                  }
                                },
                                "id": 4154,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4153,
                                  "name": "direction",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4139,
                                  "src": "996:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "973:33:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                  "typeString": "mapping(uint256 => uint256)"
                                }
                              },
                              "id": 4156,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 4155,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1007:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "973:36:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4157,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "969:41:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_uint256_$",
                            "typeString": "tuple(int_const 0,uint256)"
                          }
                        },
                        "src": "950:60:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4159,
                      "nodeType": "ExpressionStatement",
                      "src": "950:60:4"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4160,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4139,
                          "src": "1025:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4161,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4110,
                          "src": "1038:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1025:22:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4187,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4139,
                            "src": "1331:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4188,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4113,
                            "src": "1344:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1331:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4214,
                        "nodeType": "IfStatement",
                        "src": "1327:291:4",
                        "trueBody": {
                          "id": 4213,
                          "nodeType": "Block",
                          "src": "1356:262:4",
                          "statements": [
                            {
                              "body": {
                                "id": 4211,
                                "nodeType": "Block",
                                "src": "1411:196:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4195,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 4193,
                                        "name": "preIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4144,
                                        "src": "1430:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 4194,
                                        "name": "next",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4146,
                                        "src": "1441:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "1430:15:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4196,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1430:15:4"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4203,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 4197,
                                        "name": "next",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4146,
                                        "src": "1464:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 4198,
                                            "name": "limitOrderPriceListMap",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4119,
                                            "src": "1471:22:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                              "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                            }
                                          },
                                          "id": 4200,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 4199,
                                            "name": "direction",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4139,
                                            "src": "1494:9:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "1471:33:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                            "typeString": "mapping(uint256 => uint256)"
                                          }
                                        },
                                        "id": 4202,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 4201,
                                          "name": "next",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4146,
                                          "src": "1505:4:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "1471:39:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "1464:46:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4204,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1464:46:4"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4207,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 4205,
                                        "name": "next",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4146,
                                        "src": "1533:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 4206,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1541:1:4",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "1533:9:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 4210,
                                    "nodeType": "IfStatement",
                                    "src": "1529:63:4",
                                    "trueBody": {
                                      "id": 4209,
                                      "nodeType": "Block",
                                      "src": "1544:48:4",
                                      "statements": [
                                        {
                                          "id": 4208,
                                          "nodeType": "Break",
                                          "src": "1567:5:4"
                                        }
                                      ]
                                    }
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4192,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 4190,
                                  "name": "next",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4146,
                                  "src": "1397:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 4191,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4141,
                                  "src": "1404:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1397:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 4212,
                              "nodeType": "WhileStatement",
                              "src": "1391:216:4"
                            }
                          ]
                        }
                      },
                      "id": 4215,
                      "nodeType": "IfStatement",
                      "src": "1021:597:4",
                      "trueBody": {
                        "id": 4186,
                        "nodeType": "Block",
                        "src": "1049:263:4",
                        "statements": [
                          {
                            "body": {
                              "id": 4184,
                              "nodeType": "Block",
                              "src": "1105:196:4",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 4166,
                                      "name": "preIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4144,
                                      "src": "1124:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "id": 4167,
                                      "name": "next",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4146,
                                      "src": "1135:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1124:15:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4169,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1124:15:4"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4176,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 4170,
                                      "name": "next",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4146,
                                      "src": "1158:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 4171,
                                          "name": "limitOrderPriceListMap",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4119,
                                          "src": "1165:22:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                            "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                          }
                                        },
                                        "id": 4173,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 4172,
                                          "name": "direction",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4139,
                                          "src": "1188:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "1165:33:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                          "typeString": "mapping(uint256 => uint256)"
                                        }
                                      },
                                      "id": 4175,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 4174,
                                        "name": "next",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4146,
                                        "src": "1199:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1165:39:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1158:46:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4177,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1158:46:4"
                                },
                                {
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4180,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 4178,
                                      "name": "next",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4146,
                                      "src": "1227:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 4179,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1235:1:4",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1227:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseBody": null,
                                  "id": 4183,
                                  "nodeType": "IfStatement",
                                  "src": "1223:63:4",
                                  "trueBody": {
                                    "id": 4182,
                                    "nodeType": "Block",
                                    "src": "1238:48:4",
                                    "statements": [
                                      {
                                        "id": 4181,
                                        "nodeType": "Break",
                                        "src": "1261:5:4"
                                      }
                                    ]
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4165,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4163,
                                "name": "next",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4146,
                                "src": "1091:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4164,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4141,
                                "src": "1098:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1091:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 4185,
                            "nodeType": "WhileStatement",
                            "src": "1085:216:4"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 4217,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "priceLocation",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4142,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4139,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4217,
                      "src": "838:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4138,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "838:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4141,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4217,
                      "src": "863:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4140,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "863:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "827:47:4"
                },
                "returnParameters": {
                  "id": 4147,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4144,
                      "name": "preIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 4217,
                      "src": "913:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4143,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "913:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4146,
                      "name": "next",
                      "nodeType": "VariableDeclaration",
                      "scope": 4217,
                      "src": "928:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4145,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "928:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "912:26:4"
                },
                "scope": 4381,
                "src": "805:820:4",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 4282,
                  "nodeType": "Block",
                  "src": "1712:588:4",
                  "statements": [
                    {
                      "assignments": [
                        4225
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 4225,
                          "name": "priceArrayLength",
                          "nodeType": "VariableDeclaration",
                          "scope": 4282,
                          "src": "1755:21:4",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 4224,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "1755:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 4229,
                      "initialValue": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4226,
                          "name": "limitOrderPriceArrayLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4123,
                          "src": "1779:26:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 4228,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4227,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4219,
                          "src": "1806:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1779:37:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1755:61:4"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4230,
                          "name": "priceArrayLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4225,
                          "src": "1831:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1851:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1831:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 4275,
                        "nodeType": "Block",
                        "src": "2016:225:4",
                        "statements": [
                          {
                            "assignments": [
                              4251,
                              4253
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 4251,
                                "name": "preIndex",
                                "nodeType": "VariableDeclaration",
                                "scope": 4275,
                                "src": "2032:13:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4250,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2032:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4253,
                                "name": "nextIndex",
                                "nodeType": "VariableDeclaration",
                                "scope": 4275,
                                "src": "2047:14:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4252,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2047:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 4258,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4255,
                                  "name": "direction",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4219,
                                  "src": "2079:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4256,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4221,
                                  "src": "2090:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4254,
                                "name": "priceLocation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4217,
                                "src": "2065:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                                }
                              },
                              "id": 4257,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2065:31:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2031:65:4"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4259,
                                    "name": "limitOrderPriceListMap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4119,
                                    "src": "2111:22:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 4262,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4260,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4219,
                                    "src": "2134:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2111:33:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 4263,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4261,
                                  "name": "preIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4251,
                                  "src": "2145:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2111:43:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 4264,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4221,
                                "src": "2157:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2111:51:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4266,
                            "nodeType": "ExpressionStatement",
                            "src": "2111:51:4"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4273,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4267,
                                    "name": "limitOrderPriceListMap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4119,
                                    "src": "2177:22:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 4270,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4268,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4219,
                                    "src": "2200:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2177:33:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 4271,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4269,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4221,
                                  "src": "2211:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2177:40:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 4272,
                                "name": "nextIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4253,
                                "src": "2220:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2177:52:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4274,
                            "nodeType": "ExpressionStatement",
                            "src": "2177:52:4"
                          }
                        ]
                      },
                      "id": 4276,
                      "nodeType": "IfStatement",
                      "src": "1827:414:4",
                      "trueBody": {
                        "id": 4249,
                        "nodeType": "Block",
                        "src": "1854:147:4",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4233,
                                    "name": "limitOrderPriceListMap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4119,
                                    "src": "1886:22:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 4236,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4234,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4219,
                                    "src": "1909:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1886:33:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 4237,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 4235,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1920:1:4",
                                  "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": "1886:36:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 4238,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4221,
                                "src": "1925:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1886:44:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4240,
                            "nodeType": "ExpressionStatement",
                            "src": "1886:44:4"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 4247,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4241,
                                    "name": "limitOrderPriceListMap",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4119,
                                    "src": "1945:22:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                      "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                    }
                                  },
                                  "id": 4244,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4242,
                                    "name": "direction",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4219,
                                    "src": "1968:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1945:33:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 4245,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4243,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4221,
                                  "src": "1979:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "1945:40:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 4246,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1988:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1945:44:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4248,
                            "nodeType": "ExpressionStatement",
                            "src": "1945:44:4"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": false,
                        "src": "2253:39:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4277,
                            "name": "limitOrderPriceArrayLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4123,
                            "src": "2253:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4279,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4278,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4219,
                            "src": "2280:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2253:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4281,
                      "nodeType": "ExpressionStatement",
                      "src": "2253:39:4"
                    }
                  ]
                },
                "documentation": null,
                "id": 4283,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "addPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4222,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4219,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4283,
                      "src": "1661:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4218,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1661:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4221,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4283,
                      "src": "1686:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4220,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1686:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1650:47:4"
                },
                "returnParameters": {
                  "id": 4223,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1712:0:4"
                },
                "scope": 4381,
                "src": "1633:667:4",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 4330,
                  "nodeType": "Block",
                  "src": "2387:384:4",
                  "statements": [
                    {
                      "assignments": [
                        4291,
                        4293
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 4291,
                          "name": "preIndex",
                          "nodeType": "VariableDeclaration",
                          "scope": 4330,
                          "src": "2431:13:4",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 4290,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2431:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 4293,
                          "name": "nextIndex",
                          "nodeType": "VariableDeclaration",
                          "scope": 4330,
                          "src": "2446:14:4",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 4292,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2446:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 4298,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4295,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4285,
                            "src": "2478:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4296,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4287,
                            "src": "2489:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4294,
                          "name": "priceLocation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4217,
                          "src": "2464:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                            "typeString": "function (uint256,uint256) view returns (uint256,uint256)"
                          }
                        },
                        "id": 4297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2464:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                          "typeString": "tuple(uint256,uint256)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2430:65:4"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 4300,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4287,
                              "src": "2514:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4301,
                              "name": "nextIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4293,
                              "src": "2523:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2514:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "496e76616c6964207072696365",
                            "id": 4303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2534:15:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_eaa01effe6abd0543e9529d3961b0f5d26980f0661c156a79b89c39a093463f7",
                              "typeString": "literal_string \"Invalid price\""
                            },
                            "value": "Invalid price"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_eaa01effe6abd0543e9529d3961b0f5d26980f0661c156a79b89c39a093463f7",
                              "typeString": "literal_string \"Invalid price\""
                            }
                          ],
                          "id": 4299,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "2506:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 4304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2506:44:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4305,
                      "nodeType": "ExpressionStatement",
                      "src": "2506:44:4"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4306,
                              "name": "limitOrderPriceListMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4119,
                              "src": "2561:22:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4309,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4307,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4285,
                              "src": "2584:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2561:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4310,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4308,
                            "name": "preIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4291,
                            "src": "2595:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2561:43:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4311,
                              "name": "limitOrderPriceListMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4119,
                              "src": "2607:22:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4313,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4312,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4285,
                              "src": "2630:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2607:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4315,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4314,
                            "name": "nextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4293,
                            "src": "2641:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2607:44:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2561:90:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4317,
                      "nodeType": "ExpressionStatement",
                      "src": "2561:90:4"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "delete",
                        "prefix": true,
                        "src": "2662:51:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4318,
                              "name": "limitOrderPriceListMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4119,
                              "src": "2669:22:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4320,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4319,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4285,
                              "src": "2692:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2669:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4322,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4321,
                            "name": "nextIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4293,
                            "src": "2703:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2669:44:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4324,
                      "nodeType": "ExpressionStatement",
                      "src": "2662:51:4"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4328,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "--",
                        "prefix": false,
                        "src": "2724:39:4",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4325,
                            "name": "limitOrderPriceArrayLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4123,
                            "src": "2724:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4327,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4326,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4285,
                            "src": "2751:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2724:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4329,
                      "nodeType": "ExpressionStatement",
                      "src": "2724:39:4"
                    }
                  ]
                },
                "documentation": null,
                "id": 4331,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "delPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4288,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4285,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4331,
                      "src": "2336:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4284,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2336:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4287,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4331,
                      "src": "2361:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4286,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2361:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2325:47:4"
                },
                "returnParameters": {
                  "id": 4289,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2387:0:4"
                },
                "scope": 4381,
                "src": "2308:463:4",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 4348,
                  "nodeType": "Block",
                  "src": "2946:64:4",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 4340,
                          "name": "next",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4338,
                          "src": "2957:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4341,
                              "name": "limitOrderPriceListMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4119,
                              "src": "2964:22:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4343,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4342,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4333,
                              "src": "2987:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2964:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4345,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4344,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4335,
                            "src": "2998:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2964:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2957:45:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4347,
                      "nodeType": "ExpressionStatement",
                      "src": "2957:45:4"
                    }
                  ]
                },
                "documentation": null,
                "id": 4349,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "nextPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4336,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4333,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4349,
                      "src": "2808:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4332,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2808:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4335,
                      "name": "cur",
                      "nodeType": "VariableDeclaration",
                      "scope": 4349,
                      "src": "2833:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4334,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2833:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2797:45:4"
                },
                "returnParameters": {
                  "id": 4339,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4338,
                      "name": "next",
                      "nodeType": "VariableDeclaration",
                      "scope": 4349,
                      "src": "2935:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4337,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2935:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2934:11:4"
                },
                "scope": 4381,
                "src": "2779:231:4",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 4379,
                  "nodeType": "Block",
                  "src": "3292:137:4",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 4358,
                          "name": "next",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4356,
                          "src": "3303:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4359,
                              "name": "limitOrderPriceListMap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4119,
                              "src": "3310:22:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                              }
                            },
                            "id": 4361,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4360,
                              "name": "direction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4351,
                              "src": "3333:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3310:33:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 4363,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4362,
                            "name": "cur",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4353,
                            "src": "3344:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3310:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3303:45:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4365,
                      "nodeType": "ExpressionStatement",
                      "src": "3303:45:4"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 4377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 4366,
                          "name": "next",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4356,
                          "src": "3359:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 4367,
                              "name": "next",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4356,
                              "src": "3366:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3374:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "3366:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 4375,
                            "name": "next",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4356,
                            "src": "3417:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "3366:55:4",
                          "trueExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4370,
                                "name": "limitOrderPriceListMap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4119,
                                "src": "3378:22:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(uint256 => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 4372,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4371,
                                "name": "direction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4351,
                                "src": "3401:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3378:33:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4374,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3412:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3378:36:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3359:62:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4378,
                      "nodeType": "ExpressionStatement",
                      "src": "3359:62:4"
                    }
                  ]
                },
                "documentation": null,
                "id": 4380,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "nextPrice2",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4354,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4351,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4380,
                      "src": "3048:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4350,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3048:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4353,
                      "name": "cur",
                      "nodeType": "VariableDeclaration",
                      "scope": 4380,
                      "src": "3073:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4352,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3073:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3037:45:4"
                },
                "returnParameters": {
                  "id": 4357,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4356,
                      "name": "next",
                      "nodeType": "VariableDeclaration",
                      "scope": 4380,
                      "src": "3281:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4355,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3281:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3280:11:4"
                },
                "scope": 4381,
                "src": "3018:411:4",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 4382,
            "src": "28:3404:4"
          }
        ],
        "src": "0:3432:4"
      }
    },
    "contracts/interfaces/IERC20.sol": {
      "id": 5,
      "AST": {
        "absolutePath": "contracts/interfaces/IERC20.sol",
        "exportedSymbols": {
          "IERC20": [
            4465
          ]
        },
        "id": 4466,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 4383,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:5"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "interface",
            "documentation": null,
            "fullyImplemented": false,
            "id": 4465,
            "linearizedBaseContracts": [
              4465
            ],
            "name": "IERC20",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "anonymous": false,
                "documentation": null,
                "id": 4391,
                "name": "Approval",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4390,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4385,
                      "indexed": true,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4391,
                      "src": "67:21:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4384,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "67:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4387,
                      "indexed": true,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4391,
                      "src": "90:23:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4386,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "90:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4389,
                      "indexed": false,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4391,
                      "src": "115:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4388,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "115:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "66:60:5"
                },
                "src": "52:75:5"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 4399,
                "name": "Transfer",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4398,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4393,
                      "indexed": true,
                      "name": "from",
                      "nodeType": "VariableDeclaration",
                      "scope": 4399,
                      "src": "148:20:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4392,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "148:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4395,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4399,
                      "src": "170:18:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4394,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "170:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4397,
                      "indexed": false,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4399,
                      "src": "190:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4396,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "190:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "147:54:5"
                },
                "src": "133:69:5"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4404,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "name",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4400,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "223:2:5"
                },
                "returnParameters": {
                  "id": 4403,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4402,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4404,
                      "src": "249:13:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 4401,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "249:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "248:15:5"
                },
                "scope": 4465,
                "src": "210:54:5",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4409,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "symbol",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4405,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "285:2:5"
                },
                "returnParameters": {
                  "id": 4408,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4407,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4409,
                      "src": "311:13:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 4406,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "311:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "310:15:5"
                },
                "scope": 4465,
                "src": "270:56:5",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4414,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "decimals",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4410,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "349:2:5"
                },
                "returnParameters": {
                  "id": 4413,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4412,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4414,
                      "src": "375:5:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 4411,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "375:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "374:7:5"
                },
                "scope": 4465,
                "src": "332:50:5",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4419,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "totalSupply",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4415,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "408:2:5"
                },
                "returnParameters": {
                  "id": 4418,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4417,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4419,
                      "src": "434:4:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4416,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "434:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "433:6:5"
                },
                "scope": 4465,
                "src": "388:52:5",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4426,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "balanceOf",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4422,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4421,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4426,
                      "src": "465:13:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4420,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "465:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "464:15:5"
                },
                "returnParameters": {
                  "id": 4425,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4424,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4426,
                      "src": "503:4:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4423,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "503:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "502:6:5"
                },
                "scope": 4465,
                "src": "446:63:5",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4435,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "allowance",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4431,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4428,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4435,
                      "src": "534:13:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4427,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "534:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4430,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4435,
                      "src": "549:15:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4429,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "549:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "533:32:5"
                },
                "returnParameters": {
                  "id": 4434,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4433,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4435,
                      "src": "589:4:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4432,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "589:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "588:6:5"
                },
                "scope": 4465,
                "src": "515:80:5",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4444,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "approve",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4440,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4437,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4444,
                      "src": "620:15:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4436,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "620:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4439,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4444,
                      "src": "637:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4438,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "637:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "619:29:5"
                },
                "returnParameters": {
                  "id": 4443,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4442,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4444,
                      "src": "667:4:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4441,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "667:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "666:6:5"
                },
                "scope": 4465,
                "src": "603:70:5",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4453,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "transfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4449,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4446,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4453,
                      "src": "697:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4445,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "697:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4448,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4453,
                      "src": "709:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4447,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "709:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "696:24:5"
                },
                "returnParameters": {
                  "id": 4452,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4451,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4453,
                      "src": "739:4:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4450,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "739:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "738:6:5"
                },
                "scope": 4465,
                "src": "679:66:5",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4464,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "transferFrom",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4460,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4455,
                      "name": "from",
                      "nodeType": "VariableDeclaration",
                      "scope": 4464,
                      "src": "773:12:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4454,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "773:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4457,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4464,
                      "src": "787:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4456,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "787:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4459,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4464,
                      "src": "799:10:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4458,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "799:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "772:38:5"
                },
                "returnParameters": {
                  "id": 4463,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4462,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4464,
                      "src": "829:4:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4461,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "829:4:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "828:6:5"
                },
                "scope": 4465,
                "src": "751:84:5",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              }
            ],
            "scope": 4466,
            "src": "28:810:5"
          }
        ],
        "src": "0:840:5"
      }
    },
    "contracts/interfaces/IOrderBook.sol": {
      "id": 6,
      "AST": {
        "absolutePath": "contracts/interfaces/IOrderBook.sol",
        "exportedSymbols": {
          "IOrderBook": [
            4679
          ]
        },
        "id": 4680,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 4467,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:6"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "interface",
            "documentation": null,
            "fullyImplemented": false,
            "id": 4679,
            "linearizedBaseContracts": [
              4679
            ],
            "name": "IOrderBook",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "body": null,
                "documentation": null,
                "id": 4480,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "initialize",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4478,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4469,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 4480,
                      "src": "127:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4468,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "127:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4471,
                      "name": "baseToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 4480,
                      "src": "150:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4470,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "150:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4473,
                      "name": "quoteToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 4480,
                      "src": "178:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4472,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "178:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4475,
                      "name": "priceStep",
                      "nodeType": "VariableDeclaration",
                      "scope": 4480,
                      "src": "207:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4474,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "207:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4477,
                      "name": "minAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4480,
                      "src": "232:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4476,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "232:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "116:131:6"
                },
                "returnParameters": {
                  "id": 4479,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "261:0:6"
                },
                "scope": 4679,
                "src": "97:165:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4491,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "createBuyLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4487,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4482,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 4491,
                      "src": "339:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4481,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "339:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4484,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4491,
                      "src": "362:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4483,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "362:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4486,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4491,
                      "src": "383:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4485,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "383:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "328:66:6"
                },
                "returnParameters": {
                  "id": 4490,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4489,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4491,
                      "src": "423:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4488,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "423:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "422:14:6"
                },
                "scope": 4679,
                "src": "300:137:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4502,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "createSellLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4498,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4493,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 4502,
                      "src": "516:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4492,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "516:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4495,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4502,
                      "src": "539:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4494,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "539:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4497,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4502,
                      "src": "560:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4496,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "560:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "505:66:6"
                },
                "returnParameters": {
                  "id": 4501,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4500,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4502,
                      "src": "600:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4499,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "600:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "599:14:6"
                },
                "scope": 4679,
                "src": "476:138:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4507,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "cancelLimitOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4505,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4504,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4507,
                      "src": "674:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4503,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "674:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "673:14:6"
                },
                "returnParameters": {
                  "id": 4506,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "696:0:6"
                },
                "scope": 4679,
                "src": "648:49:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4516,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "userOrders",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4512,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4509,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "765:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4508,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "765:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4511,
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "779:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4510,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "779:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "764:26:6"
                },
                "returnParameters": {
                  "id": 4515,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4514,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4516,
                      "src": "814:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4513,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "814:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "813:14:6"
                },
                "scope": 4679,
                "src": "745:83:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4524,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getUserOrders",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4519,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4518,
                      "name": "user",
                      "nodeType": "VariableDeclaration",
                      "scope": 4524,
                      "src": "892:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4517,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "892:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "891:14:6"
                },
                "returnParameters": {
                  "id": 4523,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4522,
                      "name": "orderIds",
                      "nodeType": "VariableDeclaration",
                      "scope": 4524,
                      "src": "929:22:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4520,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "929:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4521,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "929:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "928:24:6"
                },
                "scope": 4679,
                "src": "869:84:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4532,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "marketOrder",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4527,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4526,
                      "name": "orderId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4532,
                      "src": "1022:12:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4525,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1022:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1021:14:6"
                },
                "returnParameters": {
                  "id": 4531,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4530,
                      "name": "order",
                      "nodeType": "VariableDeclaration",
                      "scope": 4532,
                      "src": "1059:19:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4528,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1059:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4529,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1059:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1058:21:6"
                },
                "scope": 4679,
                "src": "1001:79:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4545,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "marketBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4537,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4534,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4545,
                      "src": "1187:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4533,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1187:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4536,
                      "name": "maxSize",
                      "nodeType": "VariableDeclaration",
                      "scope": 4545,
                      "src": "1212:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4535,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1212:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1176:51:6"
                },
                "returnParameters": {
                  "id": 4544,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4540,
                      "name": "prices",
                      "nodeType": "VariableDeclaration",
                      "scope": 4545,
                      "src": "1266:20:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4538,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1266:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4539,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1266:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4543,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 4545,
                      "src": "1288:21:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4541,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1288:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4542,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1288:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1265:45:6"
                },
                "scope": 4679,
                "src": "1157:154:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4558,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "rangeBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4550,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4547,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 4558,
                      "src": "1375:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4546,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1375:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4549,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4558,
                      "src": "1391:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4548,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1391:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1374:28:6"
                },
                "returnParameters": {
                  "id": 4557,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4553,
                      "name": "prices",
                      "nodeType": "VariableDeclaration",
                      "scope": 4558,
                      "src": "1441:20:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4551,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1441:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4552,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1441:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4556,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 4558,
                      "src": "1463:21:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4554,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1463:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4555,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1463:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1440:45:6"
                },
                "scope": 4679,
                "src": "1356:130:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4563,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4559,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1531:2:6"
                },
                "returnParameters": {
                  "id": 4562,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4561,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 4563,
                      "src": "1572:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4560,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1572:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1571:12:6"
                },
                "scope": 4679,
                "src": "1514:70:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4570,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getReserves",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4564,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1612:2:6"
                },
                "returnParameters": {
                  "id": 4569,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4566,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 4570,
                      "src": "1653:19:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 4565,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1653:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4568,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 4570,
                      "src": "1674:20:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 4567,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1674:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1652:43:6"
                },
                "scope": 4679,
                "src": "1592:104:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4575,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "pair",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4571,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1741:2:6"
                },
                "returnParameters": {
                  "id": 4574,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4573,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4575,
                      "src": "1767:7:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4572,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1767:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1766:9:6"
                },
                "scope": 4679,
                "src": "1728:48:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4580,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "baseDecimal",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4576,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1834:2:6"
                },
                "returnParameters": {
                  "id": 4579,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4578,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4580,
                      "src": "1860:4:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4577,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1860:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1859:6:6"
                },
                "scope": 4679,
                "src": "1814:52:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4585,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "priceDecimal",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4581,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1918:2:6"
                },
                "returnParameters": {
                  "id": 4584,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4583,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4585,
                      "src": "1944:4:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4582,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1944:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1943:6:6"
                },
                "scope": 4679,
                "src": "1897:53:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4590,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "protocolFeeRate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4586,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2009:2:6"
                },
                "returnParameters": {
                  "id": 4589,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4588,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4590,
                      "src": "2035:4:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4587,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2035:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2034:6:6"
                },
                "scope": 4679,
                "src": "1985:56:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4595,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "subsidyFeeRate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4591,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2098:2:6"
                },
                "returnParameters": {
                  "id": 4594,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4593,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4595,
                      "src": "2124:4:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4592,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2124:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2123:6:6"
                },
                "scope": 4679,
                "src": "2075:55:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4600,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "baseToken",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4596,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2185:2:6"
                },
                "returnParameters": {
                  "id": 4599,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4598,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4600,
                      "src": "2211:7:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4597,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2211:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2210:9:6"
                },
                "scope": 4679,
                "src": "2167:53:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4605,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "quoteToken",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4601,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2276:2:6"
                },
                "returnParameters": {
                  "id": 4604,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4603,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4605,
                      "src": "2302:7:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4602,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2302:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2301:9:6"
                },
                "scope": 4679,
                "src": "2257:54:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4610,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "priceStep",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4606,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2357:2:6"
                },
                "returnParameters": {
                  "id": 4609,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4608,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4610,
                      "src": "2383:4:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4607,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2383:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2382:6:6"
                },
                "scope": 4679,
                "src": "2339:50:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4615,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "priceStepUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4613,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4612,
                      "name": "newPriceStep",
                      "nodeType": "VariableDeclaration",
                      "scope": 4615,
                      "src": "2445:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4611,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2445:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2444:19:6"
                },
                "returnParameters": {
                  "id": 4614,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2472:0:6"
                },
                "scope": 4679,
                "src": "2420:53:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4620,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "minAmount",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4616,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2515:2:6"
                },
                "returnParameters": {
                  "id": 4619,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4618,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4620,
                      "src": "2541:4:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4617,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2541:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2540:6:6"
                },
                "scope": 4679,
                "src": "2497:50:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4625,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "minAmountUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4623,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4622,
                      "name": "newMinAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4625,
                      "src": "2603:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4621,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2603:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2602:19:6"
                },
                "returnParameters": {
                  "id": 4624,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2630:0:6"
                },
                "scope": 4679,
                "src": "2578:53:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4630,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "protocolFeeRateUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4628,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4627,
                      "name": "newProtocolFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 4630,
                      "src": "2700:23:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4626,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2700:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2699:25:6"
                },
                "returnParameters": {
                  "id": 4629,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2733:0:6"
                },
                "scope": 4679,
                "src": "2669:65:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4635,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "subsidyFeeRateUpdate",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4633,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4632,
                      "name": "newSubsidyFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 4635,
                      "src": "2801:22:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4631,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2801:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2800:24:6"
                },
                "returnParameters": {
                  "id": 4634,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2833:0:6"
                },
                "scope": 4679,
                "src": "2771:63:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4648,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountOutForMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4640,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4637,
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 4648,
                      "src": "2963:15:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4636,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2963:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4639,
                      "name": "amountInOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 4648,
                      "src": "2980:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4638,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2980:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2962:37:6"
                },
                "returnParameters": {
                  "id": 4647,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4642,
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 4648,
                      "src": "3038:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4641,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3038:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4644,
                      "name": "nextReserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 4648,
                      "src": "3054:20:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4643,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3054:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4646,
                      "name": "nextReserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 4648,
                      "src": "3076:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4645,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3076:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3037:61:6"
                },
                "scope": 4679,
                "src": "2929:170:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4661,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountInForMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4653,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4650,
                      "name": "tokenOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 4661,
                      "src": "3228:16:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4649,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3228:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4652,
                      "name": "amountOutOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 4661,
                      "src": "3246:19:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4651,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3246:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3227:39:6"
                },
                "returnParameters": {
                  "id": 4660,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4655,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 4661,
                      "src": "3305:13:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4654,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3305:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4657,
                      "name": "nextReserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 4661,
                      "src": "3320:20:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4656,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3320:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4659,
                      "name": "nextReserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 4661,
                      "src": "3342:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4658,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3342:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3304:60:6"
                },
                "scope": 4679,
                "src": "3195:170:6",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4678,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "takeOrderWhenMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4668,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4663,
                      "name": "tokenIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 4678,
                      "src": "3458:15:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4662,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3458:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4665,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 4678,
                      "src": "3475:13:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4664,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3475:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4667,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4678,
                      "src": "3490:10:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4666,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3490:7:6",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3457:44:6"
                },
                "returnParameters": {
                  "id": 4677,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4670,
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 4678,
                      "src": "3530:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4669,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3530:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4673,
                      "name": "accounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 4678,
                      "src": "3546:25:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4671,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3546:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4672,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3546:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4676,
                      "name": "amounts",
                      "nodeType": "VariableDeclaration",
                      "scope": 4678,
                      "src": "3573:21:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4674,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3573:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4675,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3573:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3529:66:6"
                },
                "scope": 4679,
                "src": "3426:170:6",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              }
            ],
            "scope": 4680,
            "src": "28:3571:6"
          }
        ],
        "src": "0:3601:6"
      }
    },
    "contracts/interfaces/IOrderBookFactory.sol": {
      "id": 7,
      "AST": {
        "absolutePath": "contracts/interfaces/IOrderBookFactory.sol",
        "exportedSymbols": {
          "IOrderBookFactory": [
            4738
          ]
        },
        "id": 4739,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 4681,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:7"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "interface",
            "documentation": null,
            "fullyImplemented": false,
            "id": 4738,
            "linearizedBaseContracts": [
              4738
            ],
            "name": "IOrderBookFactory",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "anonymous": false,
                "documentation": null,
                "id": 4695,
                "name": "OrderBookCreated",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4694,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4683,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4695,
                      "src": "86:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4682,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "86:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4685,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4695,
                      "src": "95:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4684,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "95:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4687,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4695,
                      "src": "104:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4686,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "104:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4689,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4695,
                      "src": "113:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4688,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "113:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4691,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4695,
                      "src": "122:4:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4690,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "122:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4693,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4695,
                      "src": "128:4:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4692,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "128:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "85:48:7"
                },
                "src": "63:71:7"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4700,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "WETH",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4696,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "153:2:7"
                },
                "returnParameters": {
                  "id": 4699,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4698,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4700,
                      "src": "179:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4697,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "179:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "178:9:7"
                },
                "scope": 4738,
                "src": "140:48:7",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4705,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "pairFactory",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4701,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "214:2:7"
                },
                "returnParameters": {
                  "id": 4704,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4703,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4705,
                      "src": "240:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4702,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "240:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "239:9:7"
                },
                "scope": 4738,
                "src": "194:55:7",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4714,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getOrderBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4710,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4707,
                      "name": "tokenA",
                      "nodeType": "VariableDeclaration",
                      "scope": 4714,
                      "src": "277:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4706,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "277:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4709,
                      "name": "tokenB",
                      "nodeType": "VariableDeclaration",
                      "scope": 4714,
                      "src": "293:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4708,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "293:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "276:32:7"
                },
                "returnParameters": {
                  "id": 4713,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4712,
                      "name": "orderBook",
                      "nodeType": "VariableDeclaration",
                      "scope": 4714,
                      "src": "332:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4711,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "332:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "331:19:7"
                },
                "scope": 4738,
                "src": "255:96:7",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4721,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "allOrderBooks",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4717,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4716,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4721,
                      "src": "380:4:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4715,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "380:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "379:6:7"
                },
                "returnParameters": {
                  "id": 4720,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4719,
                      "name": "orderBook",
                      "nodeType": "VariableDeclaration",
                      "scope": 4721,
                      "src": "409:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4718,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "409:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "408:19:7"
                },
                "scope": 4738,
                "src": "357:71:7",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4732,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "createOrderBook",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4730,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4723,
                      "name": "baseToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 4732,
                      "src": "459:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4722,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "459:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4725,
                      "name": "quoteToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 4732,
                      "src": "478:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4724,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "478:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4727,
                      "name": "priceStep",
                      "nodeType": "VariableDeclaration",
                      "scope": 4732,
                      "src": "498:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4726,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "498:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4729,
                      "name": "minAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4732,
                      "src": "514:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4728,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "514:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "458:71:7"
                },
                "returnParameters": {
                  "id": 4731,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "538:0:7"
                },
                "scope": 4738,
                "src": "434:105:7",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4737,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getCodeHash",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4733,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "565:2:7"
                },
                "returnParameters": {
                  "id": 4736,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4735,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4737,
                      "src": "591:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4734,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "591:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "590:9:7"
                },
                "scope": 4738,
                "src": "545:55:7",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              }
            ],
            "scope": 4739,
            "src": "28:575:7"
          }
        ],
        "src": "0:603:7"
      }
    },
    "contracts/interfaces/IUniswapV2Factory.sol": {
      "id": 8,
      "AST": {
        "absolutePath": "contracts/interfaces/IUniswapV2Factory.sol",
        "exportedSymbols": {
          "IUniswapV2Factory": [
            4816
          ]
        },
        "id": 4817,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 4740,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:8"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "interface",
            "documentation": null,
            "fullyImplemented": false,
            "id": 4816,
            "linearizedBaseContracts": [
              4816
            ],
            "name": "IUniswapV2Factory",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "anonymous": false,
                "documentation": null,
                "id": 4750,
                "name": "PairCreated",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4749,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4742,
                      "indexed": true,
                      "name": "token0",
                      "nodeType": "VariableDeclaration",
                      "scope": 4750,
                      "src": "81:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4741,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "81:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4744,
                      "indexed": true,
                      "name": "token1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4750,
                      "src": "105:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4743,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "105:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4746,
                      "indexed": false,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 4750,
                      "src": "129:12:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4745,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "129:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4748,
                      "indexed": false,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4750,
                      "src": "143:4:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4747,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "143:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "80:68:8"
                },
                "src": "63:86:8"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4755,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "feeTo",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4751,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "171:2:8"
                },
                "returnParameters": {
                  "id": 4754,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4753,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4755,
                      "src": "197:7:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4752,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "197:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "196:9:8"
                },
                "scope": 4816,
                "src": "157:49:8",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4760,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "admin",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4756,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "226:2:8"
                },
                "returnParameters": {
                  "id": 4759,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4758,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4760,
                      "src": "252:7:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4757,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "252:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "251:9:8"
                },
                "scope": 4816,
                "src": "212:49:8",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4769,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getPair",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4765,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4762,
                      "name": "tokenA",
                      "nodeType": "VariableDeclaration",
                      "scope": 4769,
                      "src": "286:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4761,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "286:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4764,
                      "name": "tokenB",
                      "nodeType": "VariableDeclaration",
                      "scope": 4769,
                      "src": "302:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4763,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "302:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "285:32:8"
                },
                "returnParameters": {
                  "id": 4768,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4767,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 4769,
                      "src": "341:12:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4766,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "341:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "340:14:8"
                },
                "scope": 4816,
                "src": "269:86:8",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4776,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "allPairs",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4772,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4771,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4776,
                      "src": "379:4:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4770,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "379:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "378:6:8"
                },
                "returnParameters": {
                  "id": 4775,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4774,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 4776,
                      "src": "408:12:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4773,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "408:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "407:14:8"
                },
                "scope": 4816,
                "src": "361:61:8",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4781,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "allPairsLength",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4777,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "451:2:8"
                },
                "returnParameters": {
                  "id": 4780,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4779,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4781,
                      "src": "477:4:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4778,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "477:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "476:6:8"
                },
                "scope": 4816,
                "src": "428:55:8",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4790,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "createPair",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4786,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4783,
                      "name": "tokenA",
                      "nodeType": "VariableDeclaration",
                      "scope": 4790,
                      "src": "511:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4782,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "511:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4785,
                      "name": "tokenB",
                      "nodeType": "VariableDeclaration",
                      "scope": 4790,
                      "src": "527:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4784,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "527:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "510:32:8"
                },
                "returnParameters": {
                  "id": 4789,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4788,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 4790,
                      "src": "561:12:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4787,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "561:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "560:14:8"
                },
                "scope": 4816,
                "src": "491:84:8",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4795,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getOrderBookFactory",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4791,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "609:2:8"
                },
                "returnParameters": {
                  "id": 4794,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4793,
                      "name": "factory",
                      "nodeType": "VariableDeclaration",
                      "scope": 4795,
                      "src": "635:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4792,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "635:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "634:17:8"
                },
                "scope": 4816,
                "src": "581:71:8",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4800,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "setOrderBookFactory",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4798,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4797,
                      "name": "_orderBookFactory",
                      "nodeType": "VariableDeclaration",
                      "scope": 4800,
                      "src": "687:25:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4796,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "687:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "686:27:8"
                },
                "returnParameters": {
                  "id": 4799,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "722:0:8"
                },
                "scope": 4816,
                "src": "658:65:8",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4805,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getCodeHash",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4801,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "749:2:8"
                },
                "returnParameters": {
                  "id": 4804,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4803,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4805,
                      "src": "775:7:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4802,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "775:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "774:9:8"
                },
                "scope": 4816,
                "src": "729:55:8",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4810,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "setFeeTo",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4808,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4807,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4810,
                      "src": "810:7:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4806,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "810:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "809:9:8"
                },
                "returnParameters": {
                  "id": 4809,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "827:0:8"
                },
                "scope": 4816,
                "src": "792:36:8",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4815,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "setAdmin",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4813,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4812,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4815,
                      "src": "852:7:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4811,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "852:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "851:9:8"
                },
                "returnParameters": {
                  "id": 4814,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "869:0:8"
                },
                "scope": 4816,
                "src": "834:36:8",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              }
            ],
            "scope": 4817,
            "src": "28:845:8"
          }
        ],
        "src": "0:875:8"
      }
    },
    "contracts/interfaces/IUniswapV2Pair.sol": {
      "id": 9,
      "AST": {
        "absolutePath": "contracts/interfaces/IUniswapV2Pair.sol",
        "exportedSymbols": {
          "IUniswapV2Pair": [
            5069
          ]
        },
        "id": 5070,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 4818,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:9"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "interface",
            "documentation": null,
            "fullyImplemented": false,
            "id": 5069,
            "linearizedBaseContracts": [
              5069
            ],
            "name": "IUniswapV2Pair",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "anonymous": false,
                "documentation": null,
                "id": 4826,
                "name": "Approval",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4825,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4820,
                      "indexed": true,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4826,
                      "src": "75:21:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4819,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "75:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4822,
                      "indexed": true,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4826,
                      "src": "98:23:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4821,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "98:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4824,
                      "indexed": false,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4826,
                      "src": "123:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4823,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "123:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "74:60:9"
                },
                "src": "60:75:9"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 4834,
                "name": "Transfer",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4833,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4828,
                      "indexed": true,
                      "name": "from",
                      "nodeType": "VariableDeclaration",
                      "scope": 4834,
                      "src": "156:20:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4827,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "156:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4830,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4834,
                      "src": "178:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4829,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "178:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4832,
                      "indexed": false,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4834,
                      "src": "198:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4831,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "198:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "155:54:9"
                },
                "src": "141:69:9"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4839,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "name",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4835,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "231:2:9"
                },
                "returnParameters": {
                  "id": 4838,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4837,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4839,
                      "src": "257:13:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 4836,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "257:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "256:15:9"
                },
                "scope": 5069,
                "src": "218:54:9",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4844,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "symbol",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4840,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "293:2:9"
                },
                "returnParameters": {
                  "id": 4843,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4842,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4844,
                      "src": "319:13:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 4841,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "319:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "318:15:9"
                },
                "scope": 5069,
                "src": "278:56:9",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4849,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "decimals",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4845,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "357:2:9"
                },
                "returnParameters": {
                  "id": 4848,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4847,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4849,
                      "src": "383:5:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 4846,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "383:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "382:7:9"
                },
                "scope": 5069,
                "src": "340:50:9",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4854,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "totalSupply",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4850,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "416:2:9"
                },
                "returnParameters": {
                  "id": 4853,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4852,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4854,
                      "src": "442:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4851,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "442:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "441:6:9"
                },
                "scope": 5069,
                "src": "396:52:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4861,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "balanceOf",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4857,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4856,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4861,
                      "src": "473:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4855,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "473:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "472:15:9"
                },
                "returnParameters": {
                  "id": 4860,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4859,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4861,
                      "src": "511:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4858,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "511:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "510:6:9"
                },
                "scope": 5069,
                "src": "454:63:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4870,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "allowance",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4866,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4863,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4870,
                      "src": "542:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4862,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "542:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4865,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4870,
                      "src": "557:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4864,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "557:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "541:32:9"
                },
                "returnParameters": {
                  "id": 4869,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4868,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4870,
                      "src": "597:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4867,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "597:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "596:6:9"
                },
                "scope": 5069,
                "src": "523:80:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4879,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "approve",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4875,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4872,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4879,
                      "src": "628:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4871,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "628:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4874,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4879,
                      "src": "645:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4873,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "645:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "627:29:9"
                },
                "returnParameters": {
                  "id": 4878,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4877,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4879,
                      "src": "675:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4876,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "675:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "674:6:9"
                },
                "scope": 5069,
                "src": "611:70:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4888,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "transfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4884,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4881,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4888,
                      "src": "705:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4880,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "705:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4883,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4888,
                      "src": "717:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4882,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "717:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "704:24:9"
                },
                "returnParameters": {
                  "id": 4887,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4886,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4888,
                      "src": "747:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4885,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "747:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "746:6:9"
                },
                "scope": 5069,
                "src": "687:66:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4899,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "transferFrom",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4895,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4890,
                      "name": "from",
                      "nodeType": "VariableDeclaration",
                      "scope": 4899,
                      "src": "781:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4889,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "781:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4892,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4899,
                      "src": "795:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4891,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "795:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4894,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4899,
                      "src": "807:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4893,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "807:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "780:38:9"
                },
                "returnParameters": {
                  "id": 4898,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4897,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4899,
                      "src": "837:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4896,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "837:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "836:6:9"
                },
                "scope": 5069,
                "src": "759:84:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4904,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "DOMAIN_SEPARATOR",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4900,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "876:2:9"
                },
                "returnParameters": {
                  "id": 4903,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4902,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4904,
                      "src": "902:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4901,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "902:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "901:9:9"
                },
                "scope": 5069,
                "src": "851:60:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4909,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "PERMIT_TYPEHASH",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4905,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "941:2:9"
                },
                "returnParameters": {
                  "id": 4908,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4907,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4909,
                      "src": "967:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4906,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "967:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "966:9:9"
                },
                "scope": 5069,
                "src": "917:59:9",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4916,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "nonces",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4912,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4911,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4916,
                      "src": "998:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4910,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "998:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "997:15:9"
                },
                "returnParameters": {
                  "id": 4915,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4914,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4916,
                      "src": "1036:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4913,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1036:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1035:6:9"
                },
                "scope": 5069,
                "src": "982:60:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4933,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "permit",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4931,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4918,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1066:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4917,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1066:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4920,
                      "name": "spender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1081:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4919,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1081:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4922,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1098:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4921,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1098:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4924,
                      "name": "deadline",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1110:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4923,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1110:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4926,
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1125:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 4925,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "1125:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4928,
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1134:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4927,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1134:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4930,
                      "name": "s",
                      "nodeType": "VariableDeclaration",
                      "scope": 4933,
                      "src": "1145:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4929,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1145:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1065:90:9"
                },
                "returnParameters": {
                  "id": 4932,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1164:0:9"
                },
                "scope": 5069,
                "src": "1050:115:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 4941,
                "name": "Mint",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4940,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4935,
                      "indexed": true,
                      "name": "sender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4941,
                      "src": "1184:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4934,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1184:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4937,
                      "indexed": false,
                      "name": "amount0",
                      "nodeType": "VariableDeclaration",
                      "scope": 4941,
                      "src": "1208:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4936,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1208:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4939,
                      "indexed": false,
                      "name": "amount1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4941,
                      "src": "1222:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4938,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1222:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1183:52:9"
                },
                "src": "1173:63:9"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 4951,
                "name": "Burn",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4950,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4943,
                      "indexed": true,
                      "name": "sender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4951,
                      "src": "1253:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4942,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1253:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4945,
                      "indexed": false,
                      "name": "amount0",
                      "nodeType": "VariableDeclaration",
                      "scope": 4951,
                      "src": "1277:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4944,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1277:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4947,
                      "indexed": false,
                      "name": "amount1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4951,
                      "src": "1291:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4946,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1291:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4949,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4951,
                      "src": "1305:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4948,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1305:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1252:72:9"
                },
                "src": "1242:83:9"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 4965,
                "name": "Swap",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4964,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4953,
                      "indexed": true,
                      "name": "sender",
                      "nodeType": "VariableDeclaration",
                      "scope": 4965,
                      "src": "1352:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4952,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1352:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4955,
                      "indexed": false,
                      "name": "amount0In",
                      "nodeType": "VariableDeclaration",
                      "scope": 4965,
                      "src": "1385:14:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4954,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1385:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4957,
                      "indexed": false,
                      "name": "amount1In",
                      "nodeType": "VariableDeclaration",
                      "scope": 4965,
                      "src": "1410:14:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4956,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1410:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4959,
                      "indexed": false,
                      "name": "amount0Out",
                      "nodeType": "VariableDeclaration",
                      "scope": 4965,
                      "src": "1435:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4958,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1435:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4961,
                      "indexed": false,
                      "name": "amount1Out",
                      "nodeType": "VariableDeclaration",
                      "scope": 4965,
                      "src": "1461:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4960,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1461:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4963,
                      "indexed": true,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 4965,
                      "src": "1487:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4962,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1487:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1341:171:9"
                },
                "src": "1331:182:9"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 4971,
                "name": "Sync",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 4970,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4967,
                      "indexed": false,
                      "name": "reserve0",
                      "nodeType": "VariableDeclaration",
                      "scope": 4971,
                      "src": "1530:16:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 4966,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1530:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4969,
                      "indexed": false,
                      "name": "reserve1",
                      "nodeType": "VariableDeclaration",
                      "scope": 4971,
                      "src": "1548:16:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 4968,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1548:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1529:36:9"
                },
                "src": "1519:47:9"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4976,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "MINIMUM_LIQUIDITY",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4972,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1600:2:9"
                },
                "returnParameters": {
                  "id": 4975,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4974,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4976,
                      "src": "1626:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4973,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1626:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1625:6:9"
                },
                "scope": 5069,
                "src": "1574:58:9",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4981,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "factory",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4977,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1654:2:9"
                },
                "returnParameters": {
                  "id": 4980,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4979,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4981,
                      "src": "1680:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4978,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1680:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1679:9:9"
                },
                "scope": 5069,
                "src": "1638:51:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4986,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "token0",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4982,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1710:2:9"
                },
                "returnParameters": {
                  "id": 4985,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4984,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4986,
                      "src": "1736:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4983,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1736:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1735:9:9"
                },
                "scope": 5069,
                "src": "1695:50:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 4991,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "token1",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4987,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1766:2:9"
                },
                "returnParameters": {
                  "id": 4990,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4989,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 4991,
                      "src": "1792:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4988,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1792:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1791:9:9"
                },
                "scope": 5069,
                "src": "1751:50:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5000,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "getReserves",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 4992,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1827:2:9"
                },
                "returnParameters": {
                  "id": 4999,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 4994,
                      "name": "reserve0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5000,
                      "src": "1853:16:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 4993,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1853:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4996,
                      "name": "reserve1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5000,
                      "src": "1871:16:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 4995,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1871:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4998,
                      "name": "blockTimestampLast",
                      "nodeType": "VariableDeclaration",
                      "scope": 5000,
                      "src": "1889:25:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4997,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1889:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1852:63:9"
                },
                "scope": 5069,
                "src": "1807:109:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5005,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "price0CumulativeLast",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5001,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1951:2:9"
                },
                "returnParameters": {
                  "id": 5004,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5003,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5005,
                      "src": "1977:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5002,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1977:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1976:6:9"
                },
                "scope": 5069,
                "src": "1922:61:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5010,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "price1CumulativeLast",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5006,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2018:2:9"
                },
                "returnParameters": {
                  "id": 5009,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5008,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5010,
                      "src": "2044:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5007,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2044:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2043:6:9"
                },
                "scope": 5069,
                "src": "1989:61:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5015,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "kLast",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5011,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2070:2:9"
                },
                "returnParameters": {
                  "id": 5014,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5013,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5015,
                      "src": "2096:4:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5012,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2096:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2095:6:9"
                },
                "scope": 5069,
                "src": "2056:46:9",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5022,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "mint",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5018,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5017,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 5022,
                      "src": "2124:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5016,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2124:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2123:12:9"
                },
                "returnParameters": {
                  "id": 5021,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5020,
                      "name": "liquidity",
                      "nodeType": "VariableDeclaration",
                      "scope": 5022,
                      "src": "2154:14:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5019,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2154:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2153:16:9"
                },
                "scope": 5069,
                "src": "2110:60:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5031,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "burn",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5025,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5024,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "2190:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5023,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2190:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2189:12:9"
                },
                "returnParameters": {
                  "id": 5030,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5027,
                      "name": "amount0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "2220:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5026,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2220:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5029,
                      "name": "amount1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "2234:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5028,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2234:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2219:28:9"
                },
                "scope": 5069,
                "src": "2176:72:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5042,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "swap",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5040,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5033,
                      "name": "amount0Out",
                      "nodeType": "VariableDeclaration",
                      "scope": 5042,
                      "src": "2268:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5032,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2268:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5035,
                      "name": "amount1Out",
                      "nodeType": "VariableDeclaration",
                      "scope": 5042,
                      "src": "2285:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5034,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2285:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5037,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 5042,
                      "src": "2302:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5036,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2302:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5039,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 5042,
                      "src": "2314:19:9",
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5038,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2314:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2267:67:9"
                },
                "returnParameters": {
                  "id": 5041,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2343:0:9"
                },
                "scope": 5069,
                "src": "2254:90:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5053,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "swapOriginal",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5051,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5044,
                      "name": "amount0Out",
                      "nodeType": "VariableDeclaration",
                      "scope": 5053,
                      "src": "2372:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5043,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2372:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5046,
                      "name": "amount1Out",
                      "nodeType": "VariableDeclaration",
                      "scope": 5053,
                      "src": "2389:15:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5045,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2389:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5048,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 5053,
                      "src": "2406:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5047,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2406:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5050,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 5053,
                      "src": "2418:19:9",
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5049,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2418:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2371:67:9"
                },
                "returnParameters": {
                  "id": 5052,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2447:0:9"
                },
                "scope": 5069,
                "src": "2350:98:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5058,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "skim",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5056,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5055,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 5058,
                      "src": "2468:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5054,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2468:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2467:12:9"
                },
                "returnParameters": {
                  "id": 5057,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2488:0:9"
                },
                "scope": 5069,
                "src": "2454:35:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5061,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "sync",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5059,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2508:2:9"
                },
                "returnParameters": {
                  "id": 5060,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2519:0:9"
                },
                "scope": 5069,
                "src": "2495:25:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5068,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "initialize",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5066,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5063,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5068,
                      "src": "2548:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5062,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2548:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5065,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5068,
                      "src": "2557:7:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5064,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2557:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2547:18:9"
                },
                "returnParameters": {
                  "id": 5067,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "2574:0:9"
                },
                "scope": 5069,
                "src": "2528:47:9",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              }
            ],
            "scope": 5070,
            "src": "28:2550:9"
          }
        ],
        "src": "0:2580:9"
      }
    },
    "contracts/interfaces/IWETH.sol": {
      "id": 10,
      "AST": {
        "absolutePath": "contracts/interfaces/IWETH.sol",
        "exportedSymbols": {
          "IWETH": [
            5089
          ]
        },
        "id": 5090,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 5071,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:10"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "interface",
            "documentation": null,
            "fullyImplemented": false,
            "id": 5089,
            "linearizedBaseContracts": [
              5089
            ],
            "name": "IWETH",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "body": null,
                "documentation": null,
                "id": 5074,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "deposit",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5072,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "67:2:10"
                },
                "returnParameters": {
                  "id": 5073,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "86:0:10"
                },
                "scope": 5089,
                "src": "51:36:10",
                "stateMutability": "payable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5083,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "transfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5079,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5076,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 5083,
                      "src": "111:10:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5075,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "111:7:10",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5078,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 5083,
                      "src": "123:10:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5077,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "123:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "110:24:10"
                },
                "returnParameters": {
                  "id": 5082,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5081,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5083,
                      "src": "153:4:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5080,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "153:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "152:6:10"
                },
                "scope": 5089,
                "src": "93:66:10",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              },
              {
                "body": null,
                "documentation": null,
                "id": 5088,
                "implemented": false,
                "kind": "function",
                "modifiers": [],
                "name": "withdraw",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5086,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5085,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 5088,
                      "src": "183:4:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5084,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "183:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "182:6:10"
                },
                "returnParameters": {
                  "id": 5087,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "197:0:10"
                },
                "scope": 5089,
                "src": "165:33:10",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "external"
              }
            ],
            "scope": 5090,
            "src": "28:173:10"
          }
        ],
        "src": "0:203:10"
      }
    },
    "contracts/libraries/Arrays.sol": {
      "id": 11,
      "AST": {
        "absolutePath": "contracts/libraries/Arrays.sol",
        "exportedSymbols": {
          "Arrays": [
            5291
          ]
        },
        "id": 5292,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 5091,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:11"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "library",
            "documentation": null,
            "fullyImplemented": true,
            "id": 5291,
            "linearizedBaseContracts": [
              5291
            ],
            "name": "Arrays",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "body": {
                  "id": 5160,
                  "nodeType": "Block",
                  "src": "200:227:11",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5113,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5103,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5101,
                          "src": "211:1:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5111,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5107,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5094,
                                  "src": "226:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5108,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "226:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5109,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5097,
                                  "src": "237:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5110,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "237:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "226:19:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "215:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 5104,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "219:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5105,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "219:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 5112,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "215:31:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "src": "211:35:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 5114,
                      "nodeType": "ExpressionStatement",
                      "src": "211:35:11"
                    },
                    {
                      "body": {
                        "id": 5134,
                        "nodeType": "Block",
                        "src": "289:38:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5132,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5126,
                                  "name": "z",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5101,
                                  "src": "304:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5128,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 5127,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5116,
                                  "src": "306:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "304:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5129,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5094,
                                  "src": "311:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5131,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 5130,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5116,
                                  "src": "313:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "311:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "304:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5133,
                            "nodeType": "ExpressionStatement",
                            "src": "304:11:11"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5119,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5116,
                          "src": "272:1:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5120,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5094,
                            "src": "274:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "274:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "272:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 5135,
                      "initializationExpression": {
                        "assignments": [
                          5116
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5116,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 5135,
                            "src": "262:6:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5115,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "262:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5118,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "269:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "262:8:11"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "284:3:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 5123,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5116,
                            "src": "284:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5125,
                        "nodeType": "ExpressionStatement",
                        "src": "284:3:11"
                      },
                      "nodeType": "ForStatement",
                      "src": "257:70:11"
                    },
                    {
                      "body": {
                        "id": 5158,
                        "nodeType": "Block",
                        "src": "371:49:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5147,
                                  "name": "z",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5101,
                                  "src": "386:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5152,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5151,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5148,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5094,
                                      "src": "388:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 5149,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "388:8:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5150,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5137,
                                    "src": "399:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "388:12:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "386:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5153,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5097,
                                  "src": "404:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 5155,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 5154,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5137,
                                  "src": "406:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "404:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "386:22:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5157,
                            "nodeType": "ExpressionStatement",
                            "src": "386:22:11"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5143,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5140,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5137,
                          "src": "354:1:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5141,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5097,
                            "src": "356:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 5142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "356:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "354:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 5159,
                      "initializationExpression": {
                        "assignments": [
                          5137
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5137,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 5159,
                            "src": "344:6:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5136,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "344:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5139,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "351:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "344:8:11"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "366:3:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 5144,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5137,
                            "src": "366:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5146,
                        "nodeType": "ExpressionStatement",
                        "src": "366:3:11"
                      },
                      "nodeType": "ForStatement",
                      "src": "339:81:11"
                    }
                  ]
                },
                "documentation": null,
                "id": 5161,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "extendUint",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5098,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5094,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 5161,
                      "src": "126:15:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5092,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "126:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5093,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "126:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5097,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 5161,
                      "src": "143:15:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5095,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "143:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5096,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "143:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "125:34:11"
                },
                "returnParameters": {
                  "id": 5102,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5101,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 5161,
                      "src": "183:15:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5099,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "183:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5100,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "183:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "182:17:11"
                },
                "scope": 5291,
                "src": "106:321:11",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5230,
                  "nodeType": "Block",
                  "src": "541:230:11",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5173,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5171,
                          "src": "552:1:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5181,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5177,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5164,
                                  "src": "570:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 5178,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "570:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5179,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5167,
                                  "src": "581:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 5180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "581:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "570:19:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "556:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                              "typeString": "function (uint256) pure returns (address[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 5174,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "560:7:11",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 5175,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "560:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            }
                          },
                          "id": 5182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "556:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory",
                            "typeString": "address[] memory"
                          }
                        },
                        "src": "552:38:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 5184,
                      "nodeType": "ExpressionStatement",
                      "src": "552:38:11"
                    },
                    {
                      "body": {
                        "id": 5204,
                        "nodeType": "Block",
                        "src": "633:38:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5196,
                                  "name": "z",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5171,
                                  "src": "648:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 5198,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 5197,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5186,
                                  "src": "650:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "648:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5199,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5164,
                                  "src": "655:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 5201,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 5200,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5186,
                                  "src": "657:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "655:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "648:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5203,
                            "nodeType": "ExpressionStatement",
                            "src": "648:11:11"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5189,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5186,
                          "src": "616:1:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5190,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5164,
                            "src": "618:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 5191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "618:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "616:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 5205,
                      "initializationExpression": {
                        "assignments": [
                          5186
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5186,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 5205,
                            "src": "606:6:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5185,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "606:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5188,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "613:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "606:8:11"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "628:3:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 5193,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5186,
                            "src": "628:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5195,
                        "nodeType": "ExpressionStatement",
                        "src": "628:3:11"
                      },
                      "nodeType": "ForStatement",
                      "src": "601:70:11"
                    },
                    {
                      "body": {
                        "id": 5228,
                        "nodeType": "Block",
                        "src": "715:49:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5217,
                                  "name": "z",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5171,
                                  "src": "730:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 5222,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5218,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5164,
                                      "src": "732:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 5219,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "732:8:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5220,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5207,
                                    "src": "743:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "732:12:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "730:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5223,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5167,
                                  "src": "748:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 5225,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 5224,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5207,
                                  "src": "750:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "748:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "730:22:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5227,
                            "nodeType": "ExpressionStatement",
                            "src": "730:22:11"
                          }
                        ]
                      },
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5210,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5207,
                          "src": "698:1:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5211,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5167,
                            "src": "700:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 5212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "700:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "698:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 5229,
                      "initializationExpression": {
                        "assignments": [
                          5207
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5207,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 5229,
                            "src": "688:6:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5206,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "688:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5209,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "695:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "688:8:11"
                      },
                      "loopExpression": {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "710:3:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 5214,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5207,
                            "src": "710:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5216,
                        "nodeType": "ExpressionStatement",
                        "src": "710:3:11"
                      },
                      "nodeType": "ForStatement",
                      "src": "683:81:11"
                    }
                  ]
                },
                "documentation": null,
                "id": 5231,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "extendAddress",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5168,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5164,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 5231,
                      "src": "458:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "458:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5163,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "458:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5167,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 5231,
                      "src": "478:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5165,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "478:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5166,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "478:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "457:40:11"
                },
                "returnParameters": {
                  "id": 5172,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5171,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 5231,
                      "src": "521:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5169,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "521:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5170,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "521:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "520:20:11"
                },
                "scope": 5291,
                "src": "435:336:11",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5289,
                  "nodeType": "Block",
                  "src": "875:287:11",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5243,
                              "name": "newLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5236,
                              "src": "894:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 5244,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5234,
                                "src": "904:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 5245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "904:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "894:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "496e76616c6964206c656e677468",
                            "id": 5247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "914:16:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_089295123856887e817ba9ef604c626ebffe924cc87e7d9c9d8c4f3d4f2186f7",
                              "typeString": "literal_string \"Invalid length\""
                            },
                            "value": "Invalid length"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_089295123856887e817ba9ef604c626ebffe924cc87e7d9c9d8c4f3d4f2186f7",
                              "typeString": "literal_string \"Invalid length\""
                            }
                          ],
                          "id": 5242,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "886:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "886:45:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5249,
                      "nodeType": "ExpressionStatement",
                      "src": "886:45:11"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5250,
                          "name": "newLen",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5236,
                          "src": "946:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5251,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5234,
                            "src": "956:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 5252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "956:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "946:18:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 5287,
                        "nodeType": "Block",
                        "src": "1013:142:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5259,
                                "name": "z",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5240,
                                "src": "1028:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5263,
                                    "name": "newLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5236,
                                    "src": "1046:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 5262,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "1032:13:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                                    "typeString": "function (uint256) pure returns (address[] memory)"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 5260,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1036:7:11",
                                      "stateMutability": "nonpayable",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 5261,
                                    "length": null,
                                    "nodeType": "ArrayTypeName",
                                    "src": "1036:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                      "typeString": "address[]"
                                    }
                                  }
                                },
                                "id": 5264,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1032:21:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory",
                                  "typeString": "address[] memory"
                                }
                              },
                              "src": "1028:25:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 5266,
                            "nodeType": "ExpressionStatement",
                            "src": "1028:25:11"
                          },
                          {
                            "body": {
                              "id": 5285,
                              "nodeType": "Block",
                              "src": "1098:46:11",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5283,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 5277,
                                        "name": "z",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5240,
                                        "src": "1117:1:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 5279,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 5278,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5268,
                                        "src": "1119:1:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "1117:4:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 5280,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5234,
                                        "src": "1124:1:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 5282,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 5281,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5268,
                                        "src": "1126:1:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1124:4:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "src": "1117:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 5284,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1117:11:11"
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5273,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5271,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5268,
                                "src": "1083:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5272,
                                "name": "newLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5236,
                                "src": "1085:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1083:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5286,
                            "initializationExpression": {
                              "assignments": [
                                5268
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 5268,
                                  "name": "i",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 5286,
                                  "src": "1073:6:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 5267,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1073:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 5270,
                              "initialValue": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1080:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1073:8:11"
                            },
                            "loopExpression": {
                              "expression": {
                                "argumentTypes": null,
                                "id": 5275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "1093:3:11",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 5274,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5268,
                                  "src": "1093:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5276,
                              "nodeType": "ExpressionStatement",
                              "src": "1093:3:11"
                            },
                            "nodeType": "ForStatement",
                            "src": "1068:76:11"
                          }
                        ]
                      },
                      "id": 5288,
                      "nodeType": "IfStatement",
                      "src": "942:213:11",
                      "trueBody": {
                        "id": 5258,
                        "nodeType": "Block",
                        "src": "966:32:11",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5254,
                                "name": "z",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5240,
                                "src": "981:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 5255,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5234,
                                "src": "985:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "src": "981:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 5257,
                            "nodeType": "ExpressionStatement",
                            "src": "981:5:11"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 5290,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "subAddress",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5237,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5234,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 5290,
                      "src": "799:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5232,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "799:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5233,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "799:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5236,
                      "name": "newLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 5290,
                      "src": "819:11:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5235,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "819:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "798:33:11"
                },
                "returnParameters": {
                  "id": 5241,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5240,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 5290,
                      "src": "855:18:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5238,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "855:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5239,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "855:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "854:20:11"
                },
                "scope": 5291,
                "src": "779:383:11",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 5292,
            "src": "84:1081:11"
          }
        ],
        "src": "0:1169:11"
      }
    },
    "contracts/libraries/Math.sol": {
      "id": 12,
      "AST": {
        "absolutePath": "contracts/libraries/Math.sol",
        "exportedSymbols": {
          "Math": [
            5367
          ]
        },
        "id": 5368,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 5293,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:12"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "library",
            "documentation": null,
            "fullyImplemented": true,
            "id": 5367,
            "linearizedBaseContracts": [
              5367
            ],
            "name": "Math",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "body": {
                  "id": 5311,
                  "nodeType": "Block",
                  "src": "163:36:12",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5309,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5302,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5300,
                          "src": "174:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5303,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5295,
                              "src": "178:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5304,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5297,
                              "src": "182:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "178:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 5307,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5297,
                            "src": "190:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "178:13:12",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 5306,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5295,
                            "src": "186:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "174:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5310,
                      "nodeType": "ExpressionStatement",
                      "src": "174:17:12"
                    }
                  ]
                },
                "documentation": null,
                "id": 5312,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "min",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5298,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5295,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 5312,
                      "src": "116:6:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5294,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "116:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5297,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 5312,
                      "src": "124:6:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5296,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "124:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "115:16:12"
                },
                "returnParameters": {
                  "id": 5301,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5300,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 5312,
                      "src": "155:6:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5299,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "155:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "154:8:12"
                },
                "scope": 5367,
                "src": "103:96:12",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5365,
                  "nodeType": "Block",
                  "src": "370:250:12",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5319,
                          "name": "y",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5314,
                          "src": "385:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 5320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "389:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_3_by_1",
                            "typeString": "int_const 3"
                          },
                          "value": "3"
                        },
                        "src": "385:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5355,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5314,
                            "src": "573:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 5356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "578:1:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "573:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5363,
                        "nodeType": "IfStatement",
                        "src": "569:44:12",
                        "trueBody": {
                          "id": 5362,
                          "nodeType": "Block",
                          "src": "581:32:12",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 5360,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 5358,
                                  "name": "z",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5317,
                                  "src": "596:1:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 5359,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "600:1:12",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "596:5:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5361,
                              "nodeType": "ExpressionStatement",
                              "src": "596:5:12"
                            }
                          ]
                        }
                      },
                      "id": 5364,
                      "nodeType": "IfStatement",
                      "src": "381:232:12",
                      "trueBody": {
                        "id": 5354,
                        "nodeType": "Block",
                        "src": "392:171:12",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5322,
                                "name": "z",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5317,
                                "src": "407:1:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 5323,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5314,
                                "src": "411:1:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "407:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5325,
                            "nodeType": "ExpressionStatement",
                            "src": "407:5:12"
                          },
                          {
                            "assignments": [
                              5327
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5327,
                                "name": "x",
                                "nodeType": "VariableDeclaration",
                                "scope": 5354,
                                "src": "427:6:12",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5326,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "427:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 5333,
                            "initialValue": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5332,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5330,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5328,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5314,
                                  "src": "436:1:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "32",
                                  "id": 5329,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "440:1:12",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "436:5:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 5331,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "444:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "436:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "427:18:12"
                          },
                          {
                            "body": {
                              "id": 5352,
                              "nodeType": "Block",
                              "src": "474:78:12",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5339,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 5337,
                                      "name": "z",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5317,
                                      "src": "493:1:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "id": 5338,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5327,
                                      "src": "497:1:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "493:5:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5340,
                                  "nodeType": "ExpressionStatement",
                                  "src": "493:5:12"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 5341,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5327,
                                      "src": "517:1:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5349,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 5346,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 5344,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "id": 5342,
                                                "name": "y",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5314,
                                                "src": "522:1:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "/",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "id": 5343,
                                                "name": "x",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5327,
                                                "src": "526:1:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "522:5:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "id": 5345,
                                              "name": "x",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5327,
                                              "src": "530:1:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "522:9:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 5347,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "521:11:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "32",
                                        "id": 5348,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "535:1:12",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        },
                                        "value": "2"
                                      },
                                      "src": "521:15:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "517:19:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5351,
                                  "nodeType": "ExpressionStatement",
                                  "src": "517:19:12"
                                }
                              ]
                            },
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5334,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5327,
                                "src": "467:1:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5335,
                                "name": "z",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5317,
                                "src": "471:1:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "467:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5353,
                            "nodeType": "WhileStatement",
                            "src": "460:92:12"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 5366,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "sqrt",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5315,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5314,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 5366,
                      "src": "331:6:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5313,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "331:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "330:8:12"
                },
                "returnParameters": {
                  "id": 5318,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5317,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 5366,
                      "src": "362:6:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5316,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "362:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "361:8:12"
                },
                "scope": 5367,
                "src": "317:303:12",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 5368,
            "src": "83:540:12"
          }
        ],
        "src": "0:625:12"
      }
    },
    "contracts/libraries/OrderBookLibrary.sol": {
      "id": 13,
      "AST": {
        "absolutePath": "contracts/libraries/OrderBookLibrary.sol",
        "exportedSymbols": {
          "OrderBookLibrary": [
            6729
          ]
        },
        "id": 6730,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 5369,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:13"
          },
          {
            "absolutePath": "contracts/interfaces/IOrderBook.sol",
            "file": "../interfaces/IOrderBook.sol",
            "id": 5370,
            "nodeType": "ImportDirective",
            "scope": 6730,
            "sourceUnit": 4680,
            "src": "28:38:13",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/interfaces/IOrderBookFactory.sol",
            "file": "../interfaces/IOrderBookFactory.sol",
            "id": 5371,
            "nodeType": "ImportDirective",
            "scope": 6730,
            "sourceUnit": 4739,
            "src": "68:45:13",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/interfaces/IUniswapV2Factory.sol",
            "file": "../interfaces/IUniswapV2Factory.sol",
            "id": 5372,
            "nodeType": "ImportDirective",
            "scope": 6730,
            "sourceUnit": 4817,
            "src": "115:45:13",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/interfaces/IUniswapV2Pair.sol",
            "file": "../interfaces/IUniswapV2Pair.sol",
            "id": 5373,
            "nodeType": "ImportDirective",
            "scope": 6730,
            "sourceUnit": 5070,
            "src": "162:42:13",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/libraries/Math.sol",
            "file": "./Math.sol",
            "id": 5374,
            "nodeType": "ImportDirective",
            "scope": 6730,
            "sourceUnit": 5368,
            "src": "206:20:13",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "absolutePath": "contracts/libraries/SafeMath.sol",
            "file": "./SafeMath.sol",
            "id": 5375,
            "nodeType": "ImportDirective",
            "scope": 6730,
            "sourceUnit": 6819,
            "src": "228:24:13",
            "symbolAliases": [],
            "unitAlias": ""
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "library",
            "documentation": null,
            "fullyImplemented": true,
            "id": 6729,
            "linearizedBaseContracts": [
              6729
            ],
            "name": "OrderBookLibrary",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "id": 5378,
                "libraryName": {
                  "contractScope": null,
                  "id": 5376,
                  "name": "SafeMath",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 6818,
                  "src": "294:8:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_SafeMath_$6818",
                    "typeString": "library SafeMath"
                  }
                },
                "nodeType": "UsingForDirective",
                "src": "288:24:13",
                "typeName": {
                  "id": 5377,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "307:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              },
              {
                "constant": true,
                "id": 5381,
                "name": "LIMIT_BUY",
                "nodeType": "VariableDeclaration",
                "scope": 6729,
                "src": "320:36:13",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 5379,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "320:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 5380,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "355:1:13",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_1_by_1",
                    "typeString": "int_const 1"
                  },
                  "value": "1"
                },
                "visibility": "internal"
              },
              {
                "constant": true,
                "id": 5384,
                "name": "LIMIT_SELL",
                "nodeType": "VariableDeclaration",
                "scope": 6729,
                "src": "363:37:13",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 5382,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "363:4:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "32",
                  "id": 5383,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "399:1:13",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5409,
                  "nodeType": "Block",
                  "src": "492:185:13",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5391,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5381,
                          "src": "507:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 5392,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5386,
                          "src": "520:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "507:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5399,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "598:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5400,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "612:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "598:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5407,
                        "nodeType": "IfStatement",
                        "src": "594:76:13",
                        "trueBody": {
                          "id": 5406,
                          "nodeType": "Block",
                          "src": "623:47:13",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 5404,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 5402,
                                  "name": "opposite",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5389,
                                  "src": "638:8:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 5403,
                                  "name": "LIMIT_BUY",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5381,
                                  "src": "649:9:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "638:20:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5405,
                              "nodeType": "ExpressionStatement",
                              "src": "638:20:13"
                            }
                          ]
                        }
                      },
                      "id": 5408,
                      "nodeType": "IfStatement",
                      "src": "503:167:13",
                      "trueBody": {
                        "id": 5398,
                        "nodeType": "Block",
                        "src": "531:48:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5394,
                                "name": "opposite",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5389,
                                "src": "546:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 5395,
                                "name": "LIMIT_SELL",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5384,
                                "src": "557:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "546:21:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5397,
                            "nodeType": "ExpressionStatement",
                            "src": "546:21:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 5410,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getOppositeDirection",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5387,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5386,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 5410,
                      "src": "439:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5385,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "439:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "438:16:13"
                },
                "returnParameters": {
                  "id": 5390,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5389,
                      "name": "opposite",
                      "nodeType": "VariableDeclaration",
                      "scope": 5410,
                      "src": "478:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5388,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "478:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "477:15:13"
                },
                "scope": 6729,
                "src": "409:268:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5429,
                  "nodeType": "Block",
                  "src": "757:94:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5417,
                          "name": "admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5415,
                          "src": "768:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 5420,
                                          "name": "factory",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5412,
                                          "src": "812:7:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 5419,
                                        "name": "IOrderBookFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4738,
                                        "src": "794:17:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IOrderBookFactory_$4738_$",
                                          "typeString": "type(contract IOrderBookFactory)"
                                        }
                                      },
                                      "id": 5421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "794:26:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IOrderBookFactory_$4738",
                                        "typeString": "contract IOrderBookFactory"
                                      }
                                    },
                                    "id": 5422,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "pairFactory",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4705,
                                    "src": "794:38:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                      "typeString": "function () pure external returns (address)"
                                    }
                                  },
                                  "id": 5423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "794:40:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5418,
                                "name": "IUniswapV2Factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4816,
                                "src": "776:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV2Factory_$4816_$",
                                  "typeString": "type(contract IUniswapV2Factory)"
                                }
                              },
                              "id": 5424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "776:59:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Factory_$4816",
                                "typeString": "contract IUniswapV2Factory"
                              }
                            },
                            "id": 5425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "admin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4760,
                            "src": "776:65:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 5426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "776:67:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "768:75:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 5428,
                      "nodeType": "ExpressionStatement",
                      "src": "768:75:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5430,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAdmin",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5413,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5412,
                      "name": "factory",
                      "nodeType": "VariableDeclaration",
                      "scope": 5430,
                      "src": "703:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5411,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "703:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "702:17:13"
                },
                "returnParameters": {
                  "id": 5416,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5415,
                      "name": "admin",
                      "nodeType": "VariableDeclaration",
                      "scope": 5430,
                      "src": "743:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5414,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "743:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "742:15:13"
                },
                "scope": 6729,
                "src": "685:166:13",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5449,
                  "nodeType": "Block",
                  "src": "956:113:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5447,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5437,
                          "name": "factoryRet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5435,
                          "src": "967:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 5440,
                                          "name": "factory",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5432,
                                          "src": "1016:7:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 5439,
                                        "name": "IOrderBookFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4738,
                                        "src": "998:17:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IOrderBookFactory_$4738_$",
                                          "typeString": "type(contract IOrderBookFactory)"
                                        }
                                      },
                                      "id": 5441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "998:26:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IOrderBookFactory_$4738",
                                        "typeString": "contract IOrderBookFactory"
                                      }
                                    },
                                    "id": 5442,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "pairFactory",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4705,
                                    "src": "998:38:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                      "typeString": "function () pure external returns (address)"
                                    }
                                  },
                                  "id": 5443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "998:40:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5438,
                                "name": "IUniswapV2Factory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4816,
                                "src": "980:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV2Factory_$4816_$",
                                  "typeString": "type(contract IUniswapV2Factory)"
                                }
                              },
                              "id": 5444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "980:59:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Factory_$4816",
                                "typeString": "contract IUniswapV2Factory"
                              }
                            },
                            "id": 5445,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getOrderBookFactory",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4795,
                            "src": "980:79:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 5446,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "980:81:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "967:94:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 5448,
                      "nodeType": "ExpressionStatement",
                      "src": "967:94:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5450,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getUniswapV2OrderBookFactory",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5433,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5432,
                      "name": "factory",
                      "nodeType": "VariableDeclaration",
                      "scope": 5450,
                      "src": "897:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5431,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "897:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "896:17:13"
                },
                "returnParameters": {
                  "id": 5436,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5435,
                      "name": "factoryRet",
                      "nodeType": "VariableDeclaration",
                      "scope": 5450,
                      "src": "937:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5434,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "937:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "936:20:13"
                },
                "scope": 6729,
                "src": "859:210:13",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5473,
                  "nodeType": "Block",
                  "src": "1299:75:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5461,
                          "name": "amountGet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5459,
                          "src": "1310:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3130",
                                "id": 5467,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1348:2:13",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "value": "10"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5468,
                                "name": "baseDecimal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5456,
                                "src": "1354:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1348:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5464,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5454,
                                  "src": "1337:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5462,
                                  "name": "amountBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5452,
                                  "src": "1322:10:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5463,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6803,
                                "src": "1322:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5465,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1322:21:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5466,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6817,
                            "src": "1322:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1322:44:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1310:56:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5472,
                      "nodeType": "ExpressionStatement",
                      "src": "1310:56:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5474,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getQuoteAmountWithBaseAmountAtPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5457,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5452,
                      "name": "amountBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5474,
                      "src": "1198:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5451,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1198:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5454,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 5474,
                      "src": "1215:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5453,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1215:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5456,
                      "name": "baseDecimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5474,
                      "src": "1227:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5455,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1227:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1197:47:13"
                },
                "returnParameters": {
                  "id": 5460,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5459,
                      "name": "amountGet",
                      "nodeType": "VariableDeclaration",
                      "scope": 5474,
                      "src": "1283:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5458,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1283:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1282:16:13"
                },
                "scope": 6729,
                "src": "1153:221:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5497,
                  "nodeType": "Block",
                  "src": "1605:76:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5485,
                          "name": "amountGet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5483,
                          "src": "1616:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5493,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5478,
                              "src": "1667:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3130",
                                    "id": 5488,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1644:2:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5489,
                                    "name": "baseDecimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5480,
                                    "src": "1650:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1644:17:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5486,
                                  "name": "amountQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5476,
                                  "src": "1628:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6803,
                                "src": "1628:15:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1628:34:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6817,
                            "src": "1628:38:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1628:45:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1616:57:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5496,
                      "nodeType": "ExpressionStatement",
                      "src": "1616:57:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5498,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getBaseAmountWithQuoteAmountAtPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5481,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5476,
                      "name": "amountQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 5498,
                      "src": "1503:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5475,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1503:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5478,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 5498,
                      "src": "1521:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5477,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1521:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5480,
                      "name": "baseDecimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5498,
                      "src": "1533:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5479,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1533:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1502:48:13"
                },
                "returnParameters": {
                  "id": 5484,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5483,
                      "name": "amountGet",
                      "nodeType": "VariableDeclaration",
                      "scope": 5498,
                      "src": "1589:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5482,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1589:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1588:16:13"
                },
                "scope": 6729,
                "src": "1458:223:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5557,
                  "nodeType": "Block",
                  "src": "1912:372:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5510,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5500,
                              "src": "1931:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1942:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1931:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "494e53554646494349454e545f494e5055545f414d4f554e54",
                            "id": 5513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1945:27:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9d0db5a8336d3a6beda7b5366eec56090619c00ecb7cb918d965197949f0508c",
                              "typeString": "literal_string \"INSUFFICIENT_INPUT_AMOUNT\""
                            },
                            "value": "INSUFFICIENT_INPUT_AMOUNT"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_9d0db5a8336d3a6beda7b5366eec56090619c00ecb7cb918d965197949f0508c",
                              "typeString": "literal_string \"INSUFFICIENT_INPUT_AMOUNT\""
                            }
                          ],
                          "id": 5509,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1923:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1923:50:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5515,
                      "nodeType": "ExpressionStatement",
                      "src": "1923:50:13"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 5523,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5517,
                                "name": "reserveIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5502,
                                "src": "1992:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2004:1:13",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1992:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5520,
                                "name": "reserveOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5504,
                                "src": "2009:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5521,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2022:1:13",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2009:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "1992:31:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "494e53554646494349454e545f4c4951554944495459",
                            "id": 5524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2025:24:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_e8d3230d72418d9aed77f45ee412f45396c3f3cd599a1a457d8130d57af1a83e",
                              "typeString": "literal_string \"INSUFFICIENT_LIQUIDITY\""
                            },
                            "value": "INSUFFICIENT_LIQUIDITY"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_e8d3230d72418d9aed77f45ee412f45396c3f3cd599a1a457d8130d57af1a83e",
                              "typeString": "literal_string \"INSUFFICIENT_LIQUIDITY\""
                            }
                          ],
                          "id": 5516,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1984:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1984:66:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5526,
                      "nodeType": "ExpressionStatement",
                      "src": "1984:66:13"
                    },
                    {
                      "assignments": [
                        5528
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5528,
                          "name": "amountInWithFee",
                          "nodeType": "VariableDeclaration",
                          "scope": 5557,
                          "src": "2061:20:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5527,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2061:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5533,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "393937",
                            "id": 5531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2097:3:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_997_by_1",
                              "typeString": "int_const 997"
                            },
                            "value": "997"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_997_by_1",
                              "typeString": "int_const 997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5529,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5500,
                            "src": "2084:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6803,
                          "src": "2084:12:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2084:17:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2061:40:13"
                    },
                    {
                      "assignments": [
                        5535
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5535,
                          "name": "numerator",
                          "nodeType": "VariableDeclaration",
                          "scope": 5557,
                          "src": "2112:14:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5534,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2112:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5540,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5538,
                            "name": "reserveOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5504,
                            "src": "2149:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5536,
                            "name": "amountInWithFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5528,
                            "src": "2129:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6803,
                          "src": "2129:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2129:31:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2112:48:13"
                    },
                    {
                      "assignments": [
                        5542
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5542,
                          "name": "denominator",
                          "nodeType": "VariableDeclaration",
                          "scope": 5557,
                          "src": "2171:16:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5541,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2171:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5550,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5548,
                            "name": "amountInWithFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5528,
                            "src": "2214:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31303030",
                                "id": 5545,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2204:4:13",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                },
                                "value": "1000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5543,
                                "name": "reserveIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5502,
                                "src": "2190:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6803,
                              "src": "2190:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2190:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6753,
                          "src": "2190:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2190:40:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2171:59:13"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5551,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5507,
                          "src": "2241:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5552,
                            "name": "numerator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5535,
                            "src": "2253:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5553,
                            "name": "denominator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5542,
                            "src": "2265:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2253:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2241:35:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5556,
                      "nodeType": "ExpressionStatement",
                      "src": "2241:35:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5558,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountOut",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5505,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5500,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 5558,
                      "src": "1825:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5499,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1825:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5502,
                      "name": "reserveIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 5558,
                      "src": "1840:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5501,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1840:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5504,
                      "name": "reserveOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 5558,
                      "src": "1856:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5503,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1856:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1824:48:13"
                },
                "returnParameters": {
                  "id": 5508,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5507,
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 5558,
                      "src": "1896:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5506,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1896:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1895:16:13"
                },
                "scope": 6729,
                "src": "1803:481:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5617,
                  "nodeType": "Block",
                  "src": "2513:328:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5572,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5570,
                              "name": "amountOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5560,
                              "src": "2532:9:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2544:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "2532:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "494e53554646494349454e545f4f55545055545f414d4f554e54",
                            "id": 5573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2547:28:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_bbbb4868217c0daeb6721d77d471da8aa8a80672b4258dd2de9d7ccde9bf2146",
                              "typeString": "literal_string \"INSUFFICIENT_OUTPUT_AMOUNT\""
                            },
                            "value": "INSUFFICIENT_OUTPUT_AMOUNT"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_bbbb4868217c0daeb6721d77d471da8aa8a80672b4258dd2de9d7ccde9bf2146",
                              "typeString": "literal_string \"INSUFFICIENT_OUTPUT_AMOUNT\""
                            }
                          ],
                          "id": 5569,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "2524:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2524:52:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5575,
                      "nodeType": "ExpressionStatement",
                      "src": "2524:52:13"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 5583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5577,
                                "name": "reserveIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5562,
                                "src": "2595:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5578,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2607:1:13",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2595:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5582,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5580,
                                "name": "reserveOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5564,
                                "src": "2612:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5581,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2625:1:13",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2612:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "2595:31:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "494e53554646494349454e545f4c4951554944495459",
                            "id": 5584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2628:24:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_e8d3230d72418d9aed77f45ee412f45396c3f3cd599a1a457d8130d57af1a83e",
                              "typeString": "literal_string \"INSUFFICIENT_LIQUIDITY\""
                            },
                            "value": "INSUFFICIENT_LIQUIDITY"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_e8d3230d72418d9aed77f45ee412f45396c3f3cd599a1a457d8130d57af1a83e",
                              "typeString": "literal_string \"INSUFFICIENT_LIQUIDITY\""
                            }
                          ],
                          "id": 5576,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "2587:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5585,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2587:66:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5586,
                      "nodeType": "ExpressionStatement",
                      "src": "2587:66:13"
                    },
                    {
                      "assignments": [
                        5588
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5588,
                          "name": "numerator",
                          "nodeType": "VariableDeclaration",
                          "scope": 5617,
                          "src": "2664:14:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5587,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2664:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5596,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31303030",
                            "id": 5594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2710:4:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            },
                            "value": "1000"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5591,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5560,
                                "src": "2695:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5589,
                                "name": "reserveIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5562,
                                "src": "2681:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6803,
                              "src": "2681:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2681:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6803,
                          "src": "2681:28:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5595,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2681:34:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2664:51:13"
                    },
                    {
                      "assignments": [
                        5598
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5598,
                          "name": "denominator",
                          "nodeType": "VariableDeclaration",
                          "scope": 5617,
                          "src": "2726:16:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5597,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2726:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5606,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "393937",
                            "id": 5604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2775:3:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_997_by_1",
                              "typeString": "int_const 997"
                            },
                            "value": "997"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_997_by_1",
                              "typeString": "int_const 997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5601,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5560,
                                "src": "2760:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5599,
                                "name": "reserveOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5564,
                                "src": "2745:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5600,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6775,
                              "src": "2745:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2745:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6803,
                          "src": "2745:29:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2745:34:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2726:53:13"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5615,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5607,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5567,
                          "src": "2790:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 5613,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2831:1:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5610,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5608,
                                    "name": "numerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5588,
                                    "src": "2802:9:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5609,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5598,
                                    "src": "2814:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2802:23:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 5611,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2801:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6753,
                            "src": "2801:29:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2801:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2790:43:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5616,
                      "nodeType": "ExpressionStatement",
                      "src": "2790:43:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5618,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountIn",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5565,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5560,
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 5618,
                      "src": "2426:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5559,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2426:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5562,
                      "name": "reserveIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 5618,
                      "src": "2442:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5561,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2442:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5564,
                      "name": "reserveOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 5618,
                      "src": "2458:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5563,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2458:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2425:49:13"
                },
                "returnParameters": {
                  "id": 5568,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5567,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 5618,
                      "src": "2498:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5566,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2498:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2497:15:13"
                },
                "scope": 6729,
                "src": "2405:436:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5681,
                  "nodeType": "Block",
                  "src": "3030:365:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 5634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5632,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5622,
                              "src": "3049:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5633,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5624,
                              "src": "3059:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3049:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "4944454e544943414c5f414444524553534553",
                            "id": 5635,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3067:21:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_8363c2b4bde056d040c386dadb1db2d00d75a9af0dbcc91910b546c5c0cab6b6",
                              "typeString": "literal_string \"IDENTICAL_ADDRESSES\""
                            },
                            "value": "IDENTICAL_ADDRESSES"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_8363c2b4bde056d040c386dadb1db2d00d75a9af0dbcc91910b546c5c0cab6b6",
                              "typeString": "literal_string \"IDENTICAL_ADDRESSES\""
                            }
                          ],
                          "id": 5631,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3041:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3041:48:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5637,
                      "nodeType": "ExpressionStatement",
                      "src": "3041:48:13"
                    },
                    {
                      "assignments": [
                        5639
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5639,
                          "name": "token0",
                          "nodeType": "VariableDeclaration",
                          "scope": 5681,
                          "src": "3100:14:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 5638,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3100:7:13",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5646,
                      "initialValue": {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5640,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5622,
                            "src": "3117:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5641,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5624,
                            "src": "3126:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3117:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "id": 5644,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5624,
                          "src": "3144:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "3117:33:13",
                        "trueExpression": {
                          "argumentTypes": null,
                          "id": 5643,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5622,
                          "src": "3135:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3100:50:13"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 5652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5648,
                              "name": "token0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5639,
                              "src": "3169:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5650,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3187:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3179:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 5651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3179:10:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "3169:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5a45524f5f41444452455353",
                            "id": 5653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3191:14:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_71869b3729b99fadce3ee30cb1aa2a0d639e6a2d24158c1ae1ae0059e81b72af",
                              "typeString": "literal_string \"ZERO_ADDRESS\""
                            },
                            "value": "ZERO_ADDRESS"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_71869b3729b99fadce3ee30cb1aa2a0d639e6a2d24158c1ae1ae0059e81b72af",
                              "typeString": "literal_string \"ZERO_ADDRESS\""
                            }
                          ],
                          "id": 5647,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "3161:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 5654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3161:45:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5655,
                      "nodeType": "ExpressionStatement",
                      "src": "3161:45:13"
                    },
                    {
                      "assignments": [
                        5657,
                        5659,
                        null
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5657,
                          "name": "reserve0",
                          "nodeType": "VariableDeclaration",
                          "scope": 5681,
                          "src": "3218:16:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          },
                          "typeName": {
                            "id": 5656,
                            "name": "uint112",
                            "nodeType": "ElementaryTypeName",
                            "src": "3218:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 5659,
                          "name": "reserve1",
                          "nodeType": "VariableDeclaration",
                          "scope": 5681,
                          "src": "3236:16:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          },
                          "typeName": {
                            "id": 5658,
                            "name": "uint112",
                            "nodeType": "ElementaryTypeName",
                            "src": "3236:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        null
                      ],
                      "id": 5665,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5661,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5620,
                                "src": "3272:4:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 5660,
                              "name": "IUniswapV2Pair",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5069,
                              "src": "3257:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$5069_$",
                                "typeString": "type(contract IUniswapV2Pair)"
                              }
                            },
                            "id": 5662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3257:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV2Pair_$5069",
                              "typeString": "contract IUniswapV2Pair"
                            }
                          },
                          "id": 5663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getReserves",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5000,
                          "src": "3257:32:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                            "typeString": "function () view external returns (uint112,uint112,uint32)"
                          }
                        },
                        "id": 5664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3257:34:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                          "typeString": "tuple(uint112,uint112,uint32)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3217:74:13"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5666,
                              "name": "reserveA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5627,
                              "src": "3303:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5667,
                              "name": "reserveB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5629,
                              "src": "3313:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            }
                          ],
                          "id": 5668,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "TupleExpression",
                          "src": "3302:20:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 5671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5669,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5622,
                              "src": "3325:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5670,
                              "name": "token0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5639,
                              "src": "3335:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3325:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 5675,
                                "name": "reserve1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5659,
                                "src": "3368:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5676,
                                "name": "reserve0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5657,
                                "src": "3378:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              }
                            ],
                            "id": 5677,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3367:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                              "typeString": "tuple(uint112,uint112)"
                            }
                          },
                          "id": 5678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "3325:62:13",
                          "trueExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 5672,
                                "name": "reserve0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5657,
                                "src": "3345:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5673,
                                "name": "reserve1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5659,
                                "src": "3355:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              }
                            ],
                            "id": 5674,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3344:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                              "typeString": "tuple(uint112,uint112)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$",
                            "typeString": "tuple(uint112,uint112)"
                          }
                        },
                        "src": "3302:85:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5680,
                      "nodeType": "ExpressionStatement",
                      "src": "3302:85:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5682,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getReserves",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5625,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5620,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 5682,
                      "src": "2920:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5619,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2920:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5622,
                      "name": "tokenA",
                      "nodeType": "VariableDeclaration",
                      "scope": 5682,
                      "src": "2934:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5621,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2934:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5624,
                      "name": "tokenB",
                      "nodeType": "VariableDeclaration",
                      "scope": 5682,
                      "src": "2950:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5623,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2950:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2919:46:13"
                },
                "returnParameters": {
                  "id": 5630,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5627,
                      "name": "reserveA",
                      "nodeType": "VariableDeclaration",
                      "scope": 5682,
                      "src": "2994:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 5626,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2994:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5629,
                      "name": "reserveB",
                      "nodeType": "VariableDeclaration",
                      "scope": 5682,
                      "src": "3012:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 5628,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "3012:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2993:36:13"
                },
                "scope": 6729,
                "src": "2899:496:13",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5709,
                  "nodeType": "Block",
                  "src": "3531:124:13",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5693,
                          "name": "reserveBase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5684,
                          "src": "3546:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3561:1:13",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3546:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 5708,
                      "nodeType": "IfStatement",
                      "src": "3542:106:13",
                      "trueBody": {
                        "id": 5707,
                        "nodeType": "Block",
                        "src": "3564:84:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5705,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5696,
                                "name": "price",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5691,
                                "src": "3579:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5701,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "3130",
                                        "id": 5699,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3604:2:13",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 5700,
                                        "name": "baseDecimal",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5688,
                                        "src": "3610:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3604:17:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5697,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5686,
                                      "src": "3587:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5698,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6803,
                                    "src": "3587:16:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5702,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3587:35:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5703,
                                  "name": "reserveBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5684,
                                  "src": "3625:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3587:49:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3579:57:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5706,
                            "nodeType": "ExpressionStatement",
                            "src": "3579:57:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 5710,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getPrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5689,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5684,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5710,
                      "src": "3442:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5683,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3442:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5686,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 5710,
                      "src": "3460:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5685,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3460:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5688,
                      "name": "baseDecimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5710,
                      "src": "3479:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5687,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3479:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3441:55:13"
                },
                "returnParameters": {
                  "id": 5692,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5691,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 5710,
                      "src": "3520:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5690,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3520:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3519:12:13"
                },
                "scope": 6729,
                "src": "3424:231:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5806,
                  "nodeType": "Block",
                  "src": "4091:741:13",
                  "statements": [
                    {
                      "assignments": [
                        5732
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5732,
                          "name": "curPrice",
                          "nodeType": "VariableDeclaration",
                          "scope": 5806,
                          "src": "4102:13:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5731,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4102:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5738,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5734,
                            "name": "reserveBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5716,
                            "src": "4127:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5735,
                            "name": "reserveQuote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5718,
                            "src": "4140:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5736,
                            "name": "baseDecimal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5722,
                            "src": "4154:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5733,
                          "name": "getPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5710,
                          "src": "4118:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4118:48:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "4102:64:13"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5741,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5739,
                          "name": "curPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5732,
                          "src": "4264:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 5740,
                          "name": "targetPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5720,
                          "src": "4275:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4264:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 5804,
                        "nodeType": "Block",
                        "src": "4737:88:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5802,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5796,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5725,
                                    "src": "4753:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5797,
                                    "name": "amountAmmQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5727,
                                    "src": "4765:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5798,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "4752:28:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5799,
                                    "name": "_amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5712,
                                    "src": "4784:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5800,
                                    "name": "_amountAmmQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5714,
                                    "src": "4797:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5801,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4783:30:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "4752:61:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5803,
                            "nodeType": "ExpressionStatement",
                            "src": "4752:61:13"
                          }
                        ]
                      },
                      "id": 5805,
                      "nodeType": "IfStatement",
                      "src": "4260:565:13",
                      "trueBody": {
                        "id": 5795,
                        "nodeType": "Block",
                        "src": "4288:434:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5764,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5742,
                                "name": "amountQuoteFix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5729,
                                "src": "4303:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 5760,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "3130",
                                              "id": 5758,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4425:2:13",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_10_by_1",
                                                "typeString": "int_const 10"
                                              },
                                              "value": "10"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "id": 5759,
                                              "name": "baseDecimal",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5722,
                                              "src": "4431:11:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "4425:17:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 5755,
                                                "name": "curPrice",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5732,
                                                "src": "4411:8:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 5753,
                                                "name": "reserveBase",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5716,
                                                "src": "4395:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 5754,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "mul",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 6803,
                                              "src": "4395:15:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 5756,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4395:25:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5757,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "div",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6817,
                                          "src": "4395:29:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5761,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4395:48:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 5750,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "3130",
                                              "id": 5748,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4354:2:13",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_10_by_1",
                                                "typeString": "int_const 10"
                                              },
                                              "value": "10"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "id": 5749,
                                              "name": "baseDecimal",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5722,
                                              "src": "4360:11:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "4354:17:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 5745,
                                                "name": "targetPrice",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5720,
                                                "src": "4337:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 5743,
                                                "name": "reserveBase",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5716,
                                                "src": "4321:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 5744,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "mul",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 6803,
                                              "src": "4321:15:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 5746,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4321:28:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5747,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "div",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6817,
                                          "src": "4321:32:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5751,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4321:51:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5752,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sub",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6775,
                                      "src": "4321:73:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5762,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4321:123:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5763,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4320:125:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4303:142:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5765,
                            "nodeType": "ExpressionStatement",
                            "src": "4303:142:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5773,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5766,
                                "name": "amountQuoteFix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5729,
                                "src": "4460:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5769,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5767,
                                    "name": "amountQuoteFix",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5729,
                                    "src": "4477:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5768,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4494:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "4477:18:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 5771,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4515:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "id": 5772,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "4477:39:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 5770,
                                  "name": "amountQuoteFix",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5729,
                                  "src": "4498:14:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4460:56:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5774,
                            "nodeType": "ExpressionStatement",
                            "src": "4460:56:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5778,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5776,
                                    "name": "_amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5712,
                                    "src": "4539:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5777,
                                    "name": "amountQuoteFix",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5729,
                                    "src": "4554:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4539:29:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "4e6f7420456e6f756768204f757470757420416d6f756e74",
                                  "id": 5779,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4570:26:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_adfd26b1cad04eedcb6e5cdc7580875602a73d4f752c589080c9e18eb4f682d1",
                                    "typeString": "literal_string \"Not Enough Output Amount\""
                                  },
                                  "value": "Not Enough Output Amount"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_adfd26b1cad04eedcb6e5cdc7580875602a73d4f752c589080c9e18eb4f682d1",
                                    "typeString": "literal_string \"Not Enough Output Amount\""
                                  }
                                ],
                                "id": 5775,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "4531:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 5780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4531:66:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5781,
                            "nodeType": "ExpressionStatement",
                            "src": "4531:66:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5793,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5782,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5725,
                                    "src": "4613:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5783,
                                    "name": "amountAmmQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5727,
                                    "src": "4625:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5784,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "4612:28:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5787,
                                        "name": "amountQuoteFix",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5729,
                                        "src": "4660:14:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 5785,
                                        "name": "_amountLeft",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5712,
                                        "src": "4644:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5786,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sub",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6775,
                                      "src": "4644:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5788,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4644:31:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5791,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 5789,
                                      "name": "_amountAmmQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5714,
                                      "src": "4677:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 5790,
                                      "name": "amountQuoteFix",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5729,
                                      "src": "4695:14:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4677:32:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5792,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4643:67:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "4612:98:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5794,
                            "nodeType": "ExpressionStatement",
                            "src": "4612:98:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 5807,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getFixAmountForMovePriceUp",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5723,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5712,
                      "name": "_amountLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "3882:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5711,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3882:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5714,
                      "name": "_amountAmmQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "3900:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5713,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3900:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5716,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "3931:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5715,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3931:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5718,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "3949:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5717,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3949:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5720,
                      "name": "targetPrice",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "3968:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5719,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3968:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5722,
                      "name": "baseDecimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "3986:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5721,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3986:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "3881:122:13"
                },
                "returnParameters": {
                  "id": 5730,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5725,
                      "name": "amountLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "4032:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5724,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4032:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5727,
                      "name": "amountAmmQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "4049:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5726,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4049:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5729,
                      "name": "amountQuoteFix",
                      "nodeType": "VariableDeclaration",
                      "scope": 5807,
                      "src": "4070:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5728,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4070:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "4031:59:13"
                },
                "scope": 6729,
                "src": "3846:986:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5903,
                  "nodeType": "Block",
                  "src": "5264:726:13",
                  "statements": [
                    {
                      "assignments": [
                        5829
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 5829,
                          "name": "curPrice",
                          "nodeType": "VariableDeclaration",
                          "scope": 5903,
                          "src": "5275:13:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 5828,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "5275:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 5835,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5831,
                            "name": "reserveBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5813,
                            "src": "5300:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5832,
                            "name": "reserveQuote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5815,
                            "src": "5313:12:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5833,
                            "name": "baseDecimal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5819,
                            "src": "5327:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5830,
                          "name": "getPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5710,
                          "src": "5291:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5291:48:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "5275:64:13"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5836,
                          "name": "curPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5829,
                          "src": "5436:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 5837,
                          "name": "targetPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5817,
                          "src": "5447:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5436:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 5901,
                        "nodeType": "Block",
                        "src": "5897:86:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5899,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5893,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5822,
                                    "src": "5913:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5894,
                                    "name": "amountAmmBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5824,
                                    "src": "5925:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5895,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "5912:27:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5896,
                                    "name": "_amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5809,
                                    "src": "5943:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5897,
                                    "name": "_amountAmmBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5811,
                                    "src": "5956:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5898,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5942:29:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "5912:59:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5900,
                            "nodeType": "ExpressionStatement",
                            "src": "5912:59:13"
                          }
                        ]
                      },
                      "id": 5902,
                      "nodeType": "IfStatement",
                      "src": "5432:551:13",
                      "trueBody": {
                        "id": 5892,
                        "nodeType": "Block",
                        "src": "5460:422:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5839,
                                "name": "amountBaseFix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5826,
                                "src": "5475:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5857,
                                            "name": "curPrice",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5829,
                                            "src": "5603:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 5854,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "3130",
                                                  "id": 5852,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "5580:2:13",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_10_by_1",
                                                    "typeString": "int_const 10"
                                                  },
                                                  "value": "10"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "id": 5853,
                                                  "name": "baseDecimal",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5819,
                                                  "src": "5586:11:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "5580:17:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 5850,
                                                "name": "reserveQuote",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5815,
                                                "src": "5563:12:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 5851,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "mul",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 6803,
                                              "src": "5563:16:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 5855,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5563:35:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5856,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "div",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6817,
                                          "src": "5563:39:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5858,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5563:49:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5847,
                                            "name": "targetPrice",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5817,
                                            "src": "5532:11:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 5844,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "3130",
                                                  "id": 5842,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "5509:2:13",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_10_by_1",
                                                    "typeString": "int_const 10"
                                                  },
                                                  "value": "10"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "id": 5843,
                                                  "name": "baseDecimal",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5819,
                                                  "src": "5515:11:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "5509:17:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 5840,
                                                "name": "reserveQuote",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5815,
                                                "src": "5492:12:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 5841,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "mul",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 6803,
                                              "src": "5492:16:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 5845,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5492:35:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5846,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "div",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6817,
                                          "src": "5492:39:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5848,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5492:52:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5849,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sub",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6775,
                                      "src": "5492:70:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5859,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5492:121:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5860,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5491:123:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5475:139:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5862,
                            "nodeType": "ExpressionStatement",
                            "src": "5475:139:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5870,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 5863,
                                "name": "amountBaseFix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5826,
                                "src": "5629:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5866,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5864,
                                    "name": "amountBaseFix",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5826,
                                    "src": "5645:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5865,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5661:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "5645:17:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 5868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5681:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "id": 5869,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "5645:37:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 5867,
                                  "name": "amountBaseFix",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5826,
                                  "src": "5665:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5629:53:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5871,
                            "nodeType": "ExpressionStatement",
                            "src": "5629:53:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5875,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5873,
                                    "name": "_amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5809,
                                    "src": "5705:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5874,
                                    "name": "amountBaseFix",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5826,
                                    "src": "5720:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5705:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "4e6f7420456e6f75676820496e70757420416d6f756e74",
                                  "id": 5876,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5735:25:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_becb376bfb615d6b5744c447a42c99765893422163b9187da1a4c24eb2fd6acf",
                                    "typeString": "literal_string \"Not Enough Input Amount\""
                                  },
                                  "value": "Not Enough Input Amount"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_becb376bfb615d6b5744c447a42c99765893422163b9187da1a4c24eb2fd6acf",
                                    "typeString": "literal_string \"Not Enough Input Amount\""
                                  }
                                ],
                                "id": 5872,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "5697:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 5877,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5697:64:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5878,
                            "nodeType": "ExpressionStatement",
                            "src": "5697:64:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 5890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5879,
                                    "name": "amountLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5822,
                                    "src": "5777:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5880,
                                    "name": "amountAmmBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5824,
                                    "src": "5789:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5881,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "5776:27:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5884,
                                        "name": "amountBaseFix",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5826,
                                        "src": "5823:13:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 5882,
                                        "name": "_amountLeft",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5809,
                                        "src": "5807:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5883,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sub",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6775,
                                      "src": "5807:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5885,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5807:30:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5888,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 5886,
                                      "name": "_amountAmmBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5811,
                                      "src": "5839:14:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 5887,
                                      "name": "amountBaseFix",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5826,
                                      "src": "5856:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5839:30:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5889,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5806:64:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "src": "5776:94:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5891,
                            "nodeType": "ExpressionStatement",
                            "src": "5776:94:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 5904,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getFixAmountForMovePriceDown",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5820,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5809,
                      "name": "_amountLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5058:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5808,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5058:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5811,
                      "name": "_amountAmmBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5076:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5810,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5076:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5813,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5106:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5812,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5106:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5815,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5124:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5814,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5124:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5817,
                      "name": "targetPrice",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5143:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5816,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5143:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5819,
                      "name": "baseDecimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5161:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5818,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5161:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5057:121:13"
                },
                "returnParameters": {
                  "id": 5827,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5822,
                      "name": "amountLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5207:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5821,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5207:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5824,
                      "name": "amountAmmBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5224:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5823,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5224:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5826,
                      "name": "amountBaseFix",
                      "nodeType": "VariableDeclaration",
                      "scope": 5904,
                      "src": "5244:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5825,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5244:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "5206:57:13"
                },
                "scope": 6729,
                "src": "5020:970:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5947,
                  "nodeType": "Block",
                  "src": "6180:156:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5945,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5917,
                          "name": "section1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5915,
                          "src": "6191:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5941,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "3130",
                                        "id": 5939,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6314:2:13",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 5940,
                                        "name": "decimal",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5912,
                                        "src": "6318:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6314:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 5936,
                                          "name": "price",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5910,
                                          "src": "6303:5:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "33393838303030",
                                              "id": 5933,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "6280:7:13",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_3988000_by_1",
                                                "typeString": "int_const 3988000"
                                              },
                                              "value": "3988000"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_rational_3988000_by_1",
                                                "typeString": "int_const 3988000"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 5930,
                                                  "name": "reserveOut",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5908,
                                                  "src": "6264:10:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 5928,
                                                  "name": "reserveIn",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5906,
                                                  "src": "6250:9:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "id": 5929,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "mul",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6803,
                                                "src": "6250:13:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                              },
                                              "id": 5931,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "6250:25:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "id": 5932,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "mul",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6803,
                                            "src": "6250:29:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 5934,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "6250:38:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 5935,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6803,
                                        "src": "6250:42:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 5937,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6250:59:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5938,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "div",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6817,
                                    "src": "6250:63:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5942,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6250:76:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "39",
                                      "id": 5925,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6243:1:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_9_by_1",
                                        "typeString": "int_const 9"
                                      },
                                      "value": "9"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_9_by_1",
                                        "typeString": "int_const 9"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 5922,
                                          "name": "reserveOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5908,
                                          "src": "6227:10:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 5920,
                                          "name": "reserveOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5908,
                                          "src": "6212:10:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 5921,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6803,
                                        "src": "6212:14:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 5923,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6212:26:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5924,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6803,
                                    "src": "6212:30:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5926,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6212:33:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5927,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6753,
                                "src": "6212:37:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5943,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6212:115:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5918,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5367,
                              "src": "6202:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$5367_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 5919,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sqrt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5366,
                            "src": "6202:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6202:126:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6191:137:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5946,
                      "nodeType": "ExpressionStatement",
                      "src": "6191:137:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5948,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getSection1ForPriceUp",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5913,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5906,
                      "name": "reserveIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 5948,
                      "src": "6068:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5905,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6068:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5908,
                      "name": "reserveOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 5948,
                      "src": "6084:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5907,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6084:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5910,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 5948,
                      "src": "6101:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5909,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6101:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5912,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5948,
                      "src": "6113:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5911,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6113:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6067:59:13"
                },
                "returnParameters": {
                  "id": 5916,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5915,
                      "name": "section1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5948,
                      "src": "6165:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5914,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6165:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6164:15:13"
                },
                "scope": 6729,
                "src": "6037:299:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 5991,
                  "nodeType": "Block",
                  "src": "6528:154:13",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 5989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 5961,
                          "name": "section1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5959,
                          "src": "6539:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5985,
                                      "name": "price",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5954,
                                      "src": "6666:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5982,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "3130",
                                            "id": 5980,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6649:2:13",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "10"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "**",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 5981,
                                            "name": "decimal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5956,
                                            "src": "6653:7:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "6649:11:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "33393838303030",
                                              "id": 5977,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "6626:7:13",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_3988000_by_1",
                                                "typeString": "int_const 3988000"
                                              },
                                              "value": "3988000"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_rational_3988000_by_1",
                                                "typeString": "int_const 3988000"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 5974,
                                                  "name": "reserveOut",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5952,
                                                  "src": "6610:10:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 5972,
                                                  "name": "reserveIn",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5950,
                                                  "src": "6596:9:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "id": 5973,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "mul",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6803,
                                                "src": "6596:13:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                              },
                                              "id": 5975,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "6596:25:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "id": 5976,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "mul",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6803,
                                            "src": "6596:29:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 5978,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "6596:38:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 5979,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6803,
                                        "src": "6596:42:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 5983,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6596:65:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5984,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "div",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6817,
                                    "src": "6596:69:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5986,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6596:76:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "39",
                                      "id": 5969,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6589:1:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_9_by_1",
                                        "typeString": "int_const 9"
                                      },
                                      "value": "9"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_9_by_1",
                                        "typeString": "int_const 9"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 5966,
                                          "name": "reserveIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5950,
                                          "src": "6574:9:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 5964,
                                          "name": "reserveIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5950,
                                          "src": "6560:9:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 5965,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6803,
                                        "src": "6560:13:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 5967,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6560:24:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5968,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6803,
                                    "src": "6560:28:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5970,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6560:31:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6753,
                                "src": "6560:35:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5987,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6560:113:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5962,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5367,
                              "src": "6550:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$5367_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 5963,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sqrt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5366,
                            "src": "6550:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6550:124:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6539:135:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5990,
                      "nodeType": "ExpressionStatement",
                      "src": "6539:135:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 5992,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getSection1ForPriceDown",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 5957,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5950,
                      "name": "reserveIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 5992,
                      "src": "6416:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5949,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6416:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5952,
                      "name": "reserveOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 5992,
                      "src": "6432:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5951,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6432:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5954,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 5992,
                      "src": "6449:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5953,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6449:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5956,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 5992,
                      "src": "6461:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5955,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6461:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6415:59:13"
                },
                "returnParameters": {
                  "id": 5960,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5959,
                      "name": "section1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5992,
                      "src": "6513:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5958,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6513:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6512:15:13"
                },
                "scope": 6729,
                "src": "6383:299:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6176,
                  "nodeType": "Block",
                  "src": "7157:1423:13",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6019,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6017,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5994,
                          "src": "7172:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6018,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5381,
                          "src": "7185:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7172:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6090,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5994,
                            "src": "7839:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6091,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "7852:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7839:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6173,
                          "nodeType": "Block",
                          "src": "8459:114:13",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6163,
                                      "name": "amountInLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6007,
                                      "src": "8475:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6164,
                                      "name": "reserveBaseNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6013,
                                      "src": "8489:14:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6165,
                                      "name": "reserveQuoteNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6015,
                                      "src": "8505:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6166,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "8474:47:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6167,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5996,
                                      "src": "8525:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6168,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5998,
                                      "src": "8535:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6169,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6000,
                                      "src": "8548:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6170,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8524:37:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "src": "8474:87:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6172,
                              "nodeType": "ExpressionStatement",
                              "src": "8474:87:13"
                            }
                          ]
                        },
                        "id": 6174,
                        "nodeType": "IfStatement",
                        "src": "7835:738:13",
                        "trueBody": {
                          "id": 6162,
                          "nodeType": "Block",
                          "src": "7864:580:13",
                          "statements": [
                            {
                              "assignments": [
                                6094
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6094,
                                  "name": "section1",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6162,
                                  "src": "7879:13:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6093,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7879:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6101,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6096,
                                    "name": "reserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5998,
                                    "src": "7919:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6097,
                                    "name": "reserveQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6000,
                                    "src": "7932:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6098,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6002,
                                    "src": "7946:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6099,
                                    "name": "decimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6004,
                                    "src": "7953:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6095,
                                  "name": "getSection1ForPriceDown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5992,
                                  "src": "7895:23:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7895:66:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7879:82:13"
                            },
                            {
                              "assignments": [
                                6103
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6103,
                                  "name": "section2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6162,
                                  "src": "7976:13:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6102,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7976:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6108,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31393937",
                                    "id": 6106,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8008:4:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1997_by_1",
                                      "typeString": "int_const 1997"
                                    },
                                    "value": "1997"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1997_by_1",
                                      "typeString": "int_const 1997"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6104,
                                    "name": "reserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5998,
                                    "src": "7992:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6105,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6803,
                                  "src": "7992:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7992:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7976:37:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6109,
                                  "name": "amountBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6009,
                                  "src": "8028:10:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6110,
                                      "name": "section1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6094,
                                      "src": "8041:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6111,
                                      "name": "section2",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6103,
                                      "src": "8052:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8041:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6120,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8097:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "id": 6121,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "8041:57:13",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31393934",
                                        "id": 6118,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "8089:4:13",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1994_by_1",
                                          "typeString": "int_const 1994"
                                        },
                                        "value": "1994"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1994_by_1",
                                          "typeString": "int_const 1994"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 6115,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "id": 6113,
                                              "name": "section1",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6094,
                                              "src": "8064:8:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "id": 6114,
                                              "name": "section2",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6103,
                                              "src": "8075:8:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "8064:19:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 6116,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "8063:21:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 6117,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "div",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6817,
                                      "src": "8063:25:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6119,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8063:31:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8028:70:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6123,
                              "nodeType": "ExpressionStatement",
                              "src": "8028:70:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6131,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6124,
                                  "name": "amountBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6009,
                                  "src": "8113:10:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6127,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6125,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6009,
                                      "src": "8126:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6126,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5996,
                                      "src": "8139:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8126:21:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "id": 6129,
                                    "name": "amountBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6009,
                                    "src": "8161:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6130,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "8126:45:13",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "id": 6128,
                                    "name": "amountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5996,
                                    "src": "8150:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8113:58:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6132,
                              "nodeType": "ExpressionStatement",
                              "src": "8113:58:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6133,
                                  "name": "amountQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6011,
                                  "src": "8186:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6136,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6134,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6009,
                                      "src": "8200:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 6135,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8214:1:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "8200:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6139,
                                        "name": "amountBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6009,
                                        "src": "8235:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 6140,
                                        "name": "reserveBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5998,
                                        "src": "8247:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 6141,
                                        "name": "reserveQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6000,
                                        "src": "8260:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6138,
                                      "name": "getAmountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5558,
                                      "src": "8222:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6142,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8222:51:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6143,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "8200:73:13",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6137,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8218:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8186:87:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6145,
                              "nodeType": "ExpressionStatement",
                              "src": "8186:87:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6160,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6146,
                                      "name": "amountInLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6007,
                                      "src": "8289:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6147,
                                      "name": "reserveBaseNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6013,
                                      "src": "8303:14:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6148,
                                      "name": "reserveQuoteNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6015,
                                      "src": "8319:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6149,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "8288:47:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6152,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6150,
                                        "name": "amountIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5996,
                                        "src": "8356:8:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6151,
                                        "name": "amountBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6009,
                                        "src": "8367:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8356:21:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6155,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6153,
                                        "name": "reserveBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5998,
                                        "src": "8379:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6154,
                                        "name": "amountBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6009,
                                        "src": "8393:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8379:24:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6158,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6156,
                                        "name": "reserveQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6000,
                                        "src": "8405:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6157,
                                        "name": "amountQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6011,
                                        "src": "8420:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8405:26:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6159,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8355:77:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "src": "8288:144:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6161,
                              "nodeType": "ExpressionStatement",
                              "src": "8288:144:13"
                            }
                          ]
                        }
                      },
                      "id": 6175,
                      "nodeType": "IfStatement",
                      "src": "7168:1405:13",
                      "trueBody": {
                        "id": 6089,
                        "nodeType": "Block",
                        "src": "7196:624:13",
                        "statements": [
                          {
                            "assignments": [
                              6021
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6021,
                                "name": "section1",
                                "nodeType": "VariableDeclaration",
                                "scope": 6089,
                                "src": "7211:13:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6020,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7211:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 6028,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6023,
                                  "name": "reserveBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5998,
                                  "src": "7249:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6024,
                                  "name": "reserveQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6000,
                                  "src": "7262:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6025,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6002,
                                  "src": "7276:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6026,
                                  "name": "decimal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6004,
                                  "src": "7283:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6022,
                                "name": "getSection1ForPriceUp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5948,
                                "src": "7227:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6027,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7227:64:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "7211:80:13"
                          },
                          {
                            "assignments": [
                              6030
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6030,
                                "name": "section2",
                                "nodeType": "VariableDeclaration",
                                "scope": 6089,
                                "src": "7306:13:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6029,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7306:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 6035,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "31393937",
                                  "id": 6033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7339:4:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1997_by_1",
                                    "typeString": "int_const 1997"
                                  },
                                  "value": "1997"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1997_by_1",
                                    "typeString": "int_const 1997"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6031,
                                  "name": "reserveQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6000,
                                  "src": "7322:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6803,
                                "src": "7322:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7322:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "7306:38:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6049,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6036,
                                "name": "amountQuote",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6011,
                                "src": "7359:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6039,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6037,
                                    "name": "section1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6021,
                                    "src": "7373:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 6038,
                                    "name": "section2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6030,
                                    "src": "7384:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "7373:19:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6047,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7429:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "id": 6048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "7373:57:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31393934",
                                      "id": 6045,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7421:4:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1994_by_1",
                                        "typeString": "int_const 1994"
                                      },
                                      "value": "1994"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_1994_by_1",
                                        "typeString": "int_const 1994"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6042,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 6040,
                                            "name": "section1",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6021,
                                            "src": "7396:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 6041,
                                            "name": "section2",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6030,
                                            "src": "7407:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "7396:19:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6043,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "7395:21:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6044,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "div",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6817,
                                    "src": "7395:25:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6046,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7395:31:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7359:71:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6050,
                            "nodeType": "ExpressionStatement",
                            "src": "7359:71:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6051,
                                "name": "amountQuote",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6011,
                                "src": "7445:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6054,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6052,
                                    "name": "amountQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6011,
                                    "src": "7459:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 6053,
                                    "name": "amountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5996,
                                    "src": "7473:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "7459:22:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 6056,
                                  "name": "amountQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6011,
                                  "src": "7495:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "7459:47:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 6055,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5996,
                                  "src": "7484:8:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7445:61:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6059,
                            "nodeType": "ExpressionStatement",
                            "src": "7445:61:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6060,
                                "name": "amountBase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6009,
                                "src": "7521:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6063,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6061,
                                    "name": "amountQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6011,
                                    "src": "7534:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6062,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7549:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "7534:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6066,
                                      "name": "amountQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6011,
                                      "src": "7570:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6067,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6000,
                                      "src": "7583:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6068,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5998,
                                      "src": "7597:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 6065,
                                    "name": "getAmountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5558,
                                    "src": "7557:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6069,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7557:52:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "7534:75:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6064,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7553:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7521:88:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6072,
                            "nodeType": "ExpressionStatement",
                            "src": "7521:88:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6087,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6073,
                                    "name": "amountInLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6007,
                                    "src": "7664:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6074,
                                    "name": "reserveBaseNew",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6013,
                                    "src": "7678:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6075,
                                    "name": "reserveQuoteNew",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6015,
                                    "src": "7694:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6076,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "7663:47:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6079,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6077,
                                      "name": "amountIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5996,
                                      "src": "7731:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6078,
                                      "name": "amountQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6011,
                                      "src": "7742:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7731:22:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6082,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6080,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5998,
                                      "src": "7755:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6081,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6009,
                                      "src": "7769:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7755:24:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6085,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6083,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6000,
                                      "src": "7781:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6084,
                                      "name": "amountQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6011,
                                      "src": "7796:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7781:26:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6086,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "7730:78:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256)"
                                }
                              },
                              "src": "7663:145:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 6088,
                            "nodeType": "ExpressionStatement",
                            "src": "7663:145:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 6177,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountForMovePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6005,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 5994,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "6883:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5993,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6883:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5996,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "6908:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5995,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6908:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5998,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "6932:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5997,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6932:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6000,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "6959:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5999,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6959:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6002,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "6987:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6001,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6987:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6004,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "7008:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6003,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7008:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "6872:149:13"
                },
                "returnParameters": {
                  "id": 6016,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6007,
                      "name": "amountInLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "7060:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6006,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7060:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6009,
                      "name": "amountBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "7079:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6008,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7079:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6011,
                      "name": "amountQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "7096:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6010,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7096:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6013,
                      "name": "reserveBaseNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "7114:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6012,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7114:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6015,
                      "name": "reserveQuoteNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 6177,
                      "src": "7135:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6014,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7135:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "7059:97:13"
                },
                "scope": 6729,
                "src": "6842:1738:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6377,
                  "nodeType": "Block",
                  "src": "9070:1603:13",
                  "statements": [
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6202,
                          "name": "direction",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6179,
                          "src": "9085:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6203,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5381,
                          "src": "9098:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9085:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6285,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6283,
                            "name": "direction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6179,
                            "src": "9820:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6284,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "9833:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9820:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6374,
                          "nodeType": "Block",
                          "src": "10550:116:13",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6364,
                                      "name": "amountOutLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6192,
                                      "src": "10566:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6365,
                                      "name": "reserveBaseNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6198,
                                      "src": "10581:14:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6366,
                                      "name": "reserveQuoteNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6200,
                                      "src": "10597:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6367,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "10565:48:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6368,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6181,
                                      "src": "10617:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6369,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6183,
                                      "src": "10628:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6370,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6185,
                                      "src": "10641:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6371,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10616:38:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "src": "10565:89:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6373,
                              "nodeType": "ExpressionStatement",
                              "src": "10565:89:13"
                            }
                          ]
                        },
                        "id": 6375,
                        "nodeType": "IfStatement",
                        "src": "9816:850:13",
                        "trueBody": {
                          "id": 6363,
                          "nodeType": "Block",
                          "src": "9845:690:13",
                          "statements": [
                            {
                              "assignments": [
                                6287
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6287,
                                  "name": "section1",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6363,
                                  "src": "9860:13:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6286,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9860:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6294,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6289,
                                    "name": "reserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6183,
                                    "src": "9900:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6290,
                                    "name": "reserveQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6185,
                                    "src": "9913:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6291,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6187,
                                    "src": "9927:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6292,
                                    "name": "decimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6189,
                                    "src": "9934:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6288,
                                  "name": "getSection1ForPriceDown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5992,
                                  "src": "9876:23:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9876:66:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "9860:82:13"
                            },
                            {
                              "assignments": [
                                6296
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6296,
                                  "name": "section2",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6363,
                                  "src": "9957:13:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6295,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9957:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6301,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31393937",
                                    "id": 6299,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9989:4:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1997_by_1",
                                      "typeString": "int_const 1997"
                                    },
                                    "value": "1997"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1997_by_1",
                                      "typeString": "int_const 1997"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6297,
                                    "name": "reserveBase",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6183,
                                    "src": "9973:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6298,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6803,
                                  "src": "9973:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9973:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "9957:37:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6315,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6302,
                                  "name": "amountBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6194,
                                  "src": "10009:10:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6305,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6303,
                                      "name": "section1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6287,
                                      "src": "10022:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6304,
                                      "name": "section2",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6296,
                                      "src": "10033:8:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "10022:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6313,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10078:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "id": 6314,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "10022:57:13",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31393934",
                                        "id": 6311,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10070:4:13",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1994_by_1",
                                          "typeString": "int_const 1994"
                                        },
                                        "value": "1994"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1994_by_1",
                                          "typeString": "int_const 1994"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 6308,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "id": 6306,
                                              "name": "section1",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6287,
                                              "src": "10045:8:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "id": 6307,
                                              "name": "section2",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6296,
                                              "src": "10056:8:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "10045:19:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 6309,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "10044:21:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 6310,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "div",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6817,
                                      "src": "10044:25:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6312,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10044:31:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10009:70:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6316,
                              "nodeType": "ExpressionStatement",
                              "src": "10009:70:13"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6317,
                                  "name": "amountQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6196,
                                  "src": "10094:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6320,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6318,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6194,
                                      "src": "10108:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 6319,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10122:1:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "10108:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6323,
                                        "name": "amountBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6194,
                                        "src": "10143:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 6324,
                                        "name": "reserveBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6183,
                                        "src": "10155:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 6325,
                                        "name": "reserveQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6185,
                                        "src": "10168:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6322,
                                      "name": "getAmountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5558,
                                      "src": "10130:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6326,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10130:51:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6327,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "10108:73:13",
                                  "trueExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6321,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10126:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10094:87:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6329,
                              "nodeType": "ExpressionStatement",
                              "src": "10094:87:13"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6332,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 6330,
                                  "name": "amountQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6196,
                                  "src": "10200:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 6331,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6181,
                                  "src": "10214:9:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10200:23:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 6346,
                              "nodeType": "IfStatement",
                              "src": "10196:170:13",
                              "trueBody": {
                                "id": 6345,
                                "nodeType": "Block",
                                "src": "10225:141:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6335,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6333,
                                        "name": "amountQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6196,
                                        "src": "10244:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 6334,
                                        "name": "amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6181,
                                        "src": "10258:9:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10244:23:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6336,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10244:23:13"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6343,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6337,
                                        "name": "amountBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6194,
                                        "src": "10286:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 6339,
                                            "name": "amountQuote",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6196,
                                            "src": "10311:11:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 6340,
                                            "name": "reserveBase",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6183,
                                            "src": "10324:11:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 6341,
                                            "name": "reserveQuote",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6185,
                                            "src": "10337:12:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 6338,
                                          "name": "getAmountIn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5618,
                                          "src": "10299:11:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 6342,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10299:51:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10286:64:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6344,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10286:64:13"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6347,
                                      "name": "amountOutLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6192,
                                      "src": "10381:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6348,
                                      "name": "reserveBaseNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6198,
                                      "src": "10396:14:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6349,
                                      "name": "reserveQuoteNew",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6200,
                                      "src": "10412:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6350,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "10380:48:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6353,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6351,
                                        "name": "amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6181,
                                        "src": "10445:9:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6352,
                                        "name": "amountQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6196,
                                        "src": "10457:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10445:23:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6356,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6354,
                                        "name": "reserveBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6183,
                                        "src": "10470:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6355,
                                        "name": "amountBase",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6194,
                                        "src": "10484:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10470:24:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6359,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6357,
                                        "name": "reserveQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6185,
                                        "src": "10496:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6358,
                                        "name": "amountQuote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6196,
                                        "src": "10511:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10496:26:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6360,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10444:79:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256,uint256)"
                                  }
                                },
                                "src": "10380:143:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6362,
                              "nodeType": "ExpressionStatement",
                              "src": "10380:143:13"
                            }
                          ]
                        }
                      },
                      "id": 6376,
                      "nodeType": "IfStatement",
                      "src": "9081:1585:13",
                      "trueBody": {
                        "id": 6282,
                        "nodeType": "Block",
                        "src": "9109:692:13",
                        "statements": [
                          {
                            "assignments": [
                              6206
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6206,
                                "name": "section1",
                                "nodeType": "VariableDeclaration",
                                "scope": 6282,
                                "src": "9124:13:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6205,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9124:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 6213,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6208,
                                  "name": "reserveBase",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6183,
                                  "src": "9162:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6209,
                                  "name": "reserveQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6185,
                                  "src": "9175:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6210,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6187,
                                  "src": "9189:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6211,
                                  "name": "decimal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6189,
                                  "src": "9196:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6207,
                                "name": "getSection1ForPriceUp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5948,
                                "src": "9140:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6212,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9140:64:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9124:80:13"
                          },
                          {
                            "assignments": [
                              6215
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6215,
                                "name": "section2",
                                "nodeType": "VariableDeclaration",
                                "scope": 6282,
                                "src": "9219:13:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6214,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9219:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 6220,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "31393937",
                                  "id": 6218,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9252:4:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1997_by_1",
                                    "typeString": "int_const 1997"
                                  },
                                  "value": "1997"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1997_by_1",
                                    "typeString": "int_const 1997"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6216,
                                  "name": "reserveQuote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6185,
                                  "src": "9235:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6217,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6803,
                                "src": "9235:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9235:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9219:38:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6221,
                                "name": "amountQuote",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6196,
                                "src": "9272:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6224,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6222,
                                    "name": "section1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6206,
                                    "src": "9286:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 6223,
                                    "name": "section2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6215,
                                    "src": "9297:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "9286:19:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6232,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9342:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "id": 6233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "9286:57:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31393934",
                                      "id": 6230,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9334:4:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1994_by_1",
                                        "typeString": "int_const 1994"
                                      },
                                      "value": "1994"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_1994_by_1",
                                        "typeString": "int_const 1994"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6227,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 6225,
                                            "name": "section1",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6206,
                                            "src": "9309:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 6226,
                                            "name": "section2",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6215,
                                            "src": "9320:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "9309:19:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6228,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "9308:21:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6229,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "div",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6817,
                                    "src": "9308:25:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6231,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9308:31:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9272:71:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6235,
                            "nodeType": "ExpressionStatement",
                            "src": "9272:71:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6247,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6236,
                                "name": "amountBase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6194,
                                "src": "9358:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6239,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6237,
                                    "name": "amountQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6196,
                                    "src": "9371:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6238,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9386:1:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "9371:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6242,
                                      "name": "amountQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6196,
                                      "src": "9407:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6243,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6185,
                                      "src": "9420:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6244,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6183,
                                      "src": "9434:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 6241,
                                    "name": "getAmountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5558,
                                    "src": "9394:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6245,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9394:52:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6246,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "9371:75:13",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6240,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9390:1:13",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9358:88:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6248,
                            "nodeType": "ExpressionStatement",
                            "src": "9358:88:13"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 6249,
                                "name": "amountBase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6194,
                                "src": "9465:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6250,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6181,
                                "src": "9478:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9465:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": null,
                            "id": 6265,
                            "nodeType": "IfStatement",
                            "src": "9461:168:13",
                            "trueBody": {
                              "id": 6264,
                              "nodeType": "Block",
                              "src": "9489:140:13",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6254,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6252,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6194,
                                      "src": "9508:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "id": 6253,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6181,
                                      "src": "9521:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9508:22:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6255,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9508:22:13"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6262,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6256,
                                      "name": "amountQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6196,
                                      "src": "9549:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 6258,
                                          "name": "amountBase",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6194,
                                          "src": "9575:10:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 6259,
                                          "name": "reserveQuote",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6185,
                                          "src": "9587:12:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 6260,
                                          "name": "reserveBase",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6183,
                                          "src": "9601:11:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 6257,
                                        "name": "getAmountIn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5618,
                                        "src": "9563:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6261,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "9563:50:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9549:64:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6263,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9549:64:13"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6280,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6266,
                                    "name": "amountOutLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6192,
                                    "src": "9644:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6267,
                                    "name": "reserveBaseNew",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6198,
                                    "src": "9659:14:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6268,
                                    "name": "reserveQuoteNew",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6200,
                                    "src": "9675:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6269,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "TupleExpression",
                                "src": "9643:48:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256)"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6272,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6270,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6181,
                                      "src": "9712:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6271,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6194,
                                      "src": "9724:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9712:22:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6275,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6273,
                                      "name": "reserveBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6183,
                                      "src": "9736:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6274,
                                      "name": "amountBase",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6194,
                                      "src": "9750:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9736:24:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6278,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6276,
                                      "name": "reserveQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6185,
                                      "src": "9762:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6277,
                                      "name": "amountQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6196,
                                      "src": "9777:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9762:26:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6279,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9711:78:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256,uint256)"
                                }
                              },
                              "src": "9643:146:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 6281,
                            "nodeType": "ExpressionStatement",
                            "src": "9643:146:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 6378,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountForMovePriceWithAmountOut",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6190,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6179,
                      "name": "direction",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8794:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6178,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8794:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6181,
                      "name": "amountOut",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8819:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6180,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8819:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6183,
                      "name": "reserveBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8844:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6182,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8844:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6185,
                      "name": "reserveQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8871:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6184,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8871:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6187,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8899:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6186,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8899:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6189,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8920:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6188,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8920:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "8783:150:13"
                },
                "returnParameters": {
                  "id": 6201,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6192,
                      "name": "amountOutLeft",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8972:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6191,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8972:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6194,
                      "name": "amountBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "8992:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6193,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8992:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6196,
                      "name": "amountQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "9009:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6195,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9009:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6198,
                      "name": "reserveBaseNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "9027:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6197,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9027:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6200,
                      "name": "reserveQuoteNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 6378,
                      "src": "9048:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6199,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9048:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "8971:98:13"
                },
                "scope": 6729,
                "src": "8740:1933:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6576,
                  "nodeType": "Block",
                  "src": "11124:2065:13",
                  "statements": [
                    {
                      "assignments": [
                        6402
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6402,
                          "name": "fee",
                          "nodeType": "VariableDeclaration",
                          "scope": 6576,
                          "src": "11135:8:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 6401,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "11135:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6403,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11135:8:13"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6406,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6404,
                          "name": "tradeDir",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6380,
                          "src": "11158:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6405,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5381,
                          "src": "11170:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11158:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6481,
                            "name": "tradeDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6380,
                            "src": "12097:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6482,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "12109:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12097:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6557,
                        "nodeType": "IfStatement",
                        "src": "12093:956:13",
                        "trueBody": {
                          "id": 6556,
                          "nodeType": "Block",
                          "src": "12121:928:13",
                          "statements": [
                            {
                              "assignments": [
                                6485
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6485,
                                  "name": "amountOut",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6556,
                                  "src": "12281:14:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6484,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12281:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6491,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6487,
                                    "name": "amountInOffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6382,
                                    "src": "12334:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6488,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6384,
                                    "src": "12349:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6489,
                                    "name": "decimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6386,
                                    "src": "12356:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6486,
                                  "name": "getQuoteAmountWithBaseAmountAtPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5474,
                                  "src": "12298:35:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6490,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12298:66:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "12281:83:13"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6502,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "3130303030",
                                      "id": 6494,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12397:5:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      },
                                      "value": "10000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6492,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6485,
                                      "src": "12383:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6493,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6803,
                                    "src": "12383:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6495,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12383:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6500,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "3130303030",
                                        "id": 6498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "12423:5:13",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10000_by_1",
                                          "typeString": "int_const 10000"
                                        },
                                        "value": "10000"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6499,
                                        "name": "protocolFeeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6388,
                                        "src": "12429:15:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12423:21:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6496,
                                      "name": "orderAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6392,
                                      "src": "12407:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6497,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6803,
                                    "src": "12407:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6501,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12407:38:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12383:62:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 6554,
                                "nodeType": "Block",
                                "src": "12686:352:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6534,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6524,
                                        "name": "amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6485,
                                        "src": "12705:9:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "3130303030",
                                            "id": 6532,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12760:5:13",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10000_by_1",
                                              "typeString": "int_const 10000"
                                            },
                                            "value": "10000"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_10000_by_1",
                                              "typeString": "int_const 10000"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 6529,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "3130303030",
                                                  "id": 6527,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "12733:5:13",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                    "typeString": "int_const 10000"
                                                  },
                                                  "value": "10000"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "id": 6528,
                                                  "name": "protocolFeeRate",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6388,
                                                  "src": "12739:15:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "12733:21:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 6525,
                                                "name": "orderAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6392,
                                                "src": "12717:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 6526,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "mul",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 6803,
                                              "src": "12717:15:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 6530,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "12717:38:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 6531,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "div",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6817,
                                          "src": "12717:42:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 6533,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12717:49:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12705:61:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6535,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12705:61:13"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6542,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6536,
                                        "name": "amountInUsed",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6395,
                                        "src": "12843:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 6538,
                                            "name": "amountOut",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6485,
                                            "src": "12894:9:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 6539,
                                            "name": "price",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6384,
                                            "src": "12905:5:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 6540,
                                            "name": "decimal",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6386,
                                            "src": "12912:7:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 6537,
                                          "name": "getBaseAmountWithQuoteAmountAtPrice",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5498,
                                          "src": "12858:35:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 6541,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12858:62:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12843:77:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6543,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12843:77:13"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6546,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6544,
                                        "name": "amountOutWithFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6397,
                                        "src": "12939:16:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 6545,
                                        "name": "orderAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6392,
                                        "src": "12958:11:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12939:30:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6547,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12939:30:13"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6552,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6548,
                                        "name": "fee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6402,
                                        "src": "12988:3:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6551,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 6549,
                                          "name": "amountOutWithFee",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6397,
                                          "src": "12994:16:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 6550,
                                          "name": "amountOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6485,
                                          "src": "13013:9:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "12994:28:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12988:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6553,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12988:34:13"
                                  }
                                ]
                              },
                              "id": 6555,
                              "nodeType": "IfStatement",
                              "src": "12379:659:13",
                              "trueBody": {
                                "id": 6523,
                                "nodeType": "Block",
                                "src": "12447:220:13",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6505,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6503,
                                        "name": "amountInUsed",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6395,
                                        "src": "12504:12:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 6504,
                                        "name": "amountInOffer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6382,
                                        "src": "12519:13:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12504:28:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6506,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12504:28:13"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6515,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6507,
                                        "name": "fee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6402,
                                        "src": "12551:3:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "3130303030",
                                            "id": 6513,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12592:5:13",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10000_by_1",
                                              "typeString": "int_const 10000"
                                            },
                                            "value": "10000"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_10000_by_1",
                                              "typeString": "int_const 10000"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 6510,
                                                "name": "protocolFeeRate",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6388,
                                                "src": "12571:15:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 6508,
                                                "name": "amountOut",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6485,
                                                "src": "12557:9:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 6509,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "mul",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 6803,
                                              "src": "12557:13:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 6511,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "12557:30:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 6512,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "div",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6817,
                                          "src": "12557:34:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 6514,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12557:41:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12551:47:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6516,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12551:47:13"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6521,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6517,
                                        "name": "amountOutWithFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6397,
                                        "src": "12617:16:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6520,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 6518,
                                          "name": "amountOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6485,
                                          "src": "12636:9:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 6519,
                                          "name": "fee",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6402,
                                          "src": "12648:3:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "12636:15:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12617:34:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6522,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12617:34:13"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      "id": 6558,
                      "nodeType": "IfStatement",
                      "src": "11154:1895:13",
                      "trueBody": {
                        "id": 6480,
                        "nodeType": "Block",
                        "src": "11181:897:13",
                        "statements": [
                          {
                            "assignments": [
                              6408
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6408,
                                "name": "amountOut",
                                "nodeType": "VariableDeclaration",
                                "scope": 6480,
                                "src": "11307:14:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6407,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11307:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 6414,
                            "initialValue": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6410,
                                  "name": "amountInOffer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6382,
                                  "src": "11360:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6411,
                                  "name": "price",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6384,
                                  "src": "11375:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 6412,
                                  "name": "decimal",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6386,
                                  "src": "11382:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6409,
                                "name": "getBaseAmountWithQuoteAmountAtPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5498,
                                "src": "11324:35:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6413,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11324:66:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "11307:83:13"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "3130303030",
                                    "id": 6417,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11423:5:13",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10000_by_1",
                                      "typeString": "int_const 10000"
                                    },
                                    "value": "10000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_10000_by_1",
                                      "typeString": "int_const 10000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6415,
                                    "name": "amountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6408,
                                    "src": "11409:9:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6803,
                                  "src": "11409:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6418,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11409:20:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6423,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "3130303030",
                                      "id": 6421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11449:5:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      },
                                      "value": "10000"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6422,
                                      "name": "protocolFeeRate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6388,
                                      "src": "11455:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11449:21:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6419,
                                    "name": "orderAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6392,
                                    "src": "11433:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6420,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6803,
                                  "src": "11433:15:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11433:38:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11409:62:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 6478,
                              "nodeType": "Block",
                              "src": "11712:355:13",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6457,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6447,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6408,
                                      "src": "11731:9:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "3130303030",
                                          "id": 6455,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "11786:5:13",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_10000_by_1",
                                            "typeString": "int_const 10000"
                                          },
                                          "value": "10000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_10000_by_1",
                                            "typeString": "int_const 10000"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 6452,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "3130303030",
                                                "id": 6450,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11759:5:13",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_10000_by_1",
                                                  "typeString": "int_const 10000"
                                                },
                                                "value": "10000"
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "id": 6451,
                                                "name": "protocolFeeRate",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6388,
                                                "src": "11765:15:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "11759:21:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 6448,
                                              "name": "orderAmount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6392,
                                              "src": "11743:11:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "id": 6449,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "mul",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6803,
                                            "src": "11743:15:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 6453,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "11743:38:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 6454,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "div",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6817,
                                        "src": "11743:42:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6456,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11743:49:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11731:61:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6458,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11731:61:13"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6465,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6459,
                                      "name": "amountInUsed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6395,
                                      "src": "11869:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 6461,
                                          "name": "amountOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6408,
                                          "src": "11920:9:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 6462,
                                          "name": "price",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6384,
                                          "src": "11931:5:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 6463,
                                          "name": "decimal",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6386,
                                          "src": "11938:7:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 6460,
                                        "name": "getQuoteAmountWithBaseAmountAtPrice",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5474,
                                        "src": "11884:35:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6464,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11884:62:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11869:77:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6466,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11869:77:13"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6469,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6467,
                                      "name": "amountOutWithFee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6397,
                                      "src": "11965:16:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "id": 6468,
                                      "name": "orderAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6392,
                                      "src": "11984:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11965:30:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6470,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11965:30:13"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6476,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6471,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6402,
                                      "src": "12014:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 6474,
                                          "name": "amountOut",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6408,
                                          "src": "12041:9:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 6472,
                                          "name": "amountOutWithFee",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6397,
                                          "src": "12020:16:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 6473,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sub",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6775,
                                        "src": "12020:20:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6475,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "12020:31:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "12014:37:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6477,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12014:37:13"
                                }
                              ]
                            },
                            "id": 6479,
                            "nodeType": "IfStatement",
                            "src": "11405:662:13",
                            "trueBody": {
                              "id": 6446,
                              "nodeType": "Block",
                              "src": "11473:220:13",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6428,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6426,
                                      "name": "amountInUsed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6395,
                                      "src": "11530:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "id": 6427,
                                      "name": "amountInOffer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6382,
                                      "src": "11545:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11530:28:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6429,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11530:28:13"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6438,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6430,
                                      "name": "fee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6402,
                                      "src": "11577:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "3130303030",
                                          "id": 6436,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "11618:5:13",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_10000_by_1",
                                            "typeString": "int_const 10000"
                                          },
                                          "value": "10000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_10000_by_1",
                                            "typeString": "int_const 10000"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 6433,
                                              "name": "protocolFeeRate",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6388,
                                              "src": "11597:15:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 6431,
                                              "name": "amountOut",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6408,
                                              "src": "11583:9:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "id": 6432,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "mul",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6803,
                                            "src": "11583:13:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 6434,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "11583:30:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 6435,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "div",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6817,
                                        "src": "11583:34:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6437,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "11583:41:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11577:47:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6439,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11577:47:13"
                                },
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6444,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 6440,
                                      "name": "amountOutWithFee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6397,
                                      "src": "11643:16:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6443,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6441,
                                        "name": "amountOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6408,
                                        "src": "11662:9:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6442,
                                        "name": "fee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6402,
                                        "src": "11674:3:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "11662:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "11643:34:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6445,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11643:34:13"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 6574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 6559,
                          "name": "communityFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6399,
                          "src": "13114:12:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "313030",
                              "id": 6572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13177:3:13",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              },
                              "value": "100"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_100_by_1",
                                "typeString": "int_const 100"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 6567,
                                          "name": "subsidyFeeRate",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6390,
                                          "src": "13155:14:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 6565,
                                          "name": "fee",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6402,
                                          "src": "13147:3:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 6566,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6803,
                                        "src": "13147:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6568,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "13147:23:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "313030",
                                          "id": 6562,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "13138:3:13",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_100_by_1",
                                            "typeString": "int_const 100"
                                          },
                                          "value": "100"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_100_by_1",
                                            "typeString": "int_const 100"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 6560,
                                          "name": "fee",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6402,
                                          "src": "13130:3:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 6561,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6803,
                                        "src": "13130:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6563,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "13130:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6564,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6775,
                                    "src": "13130:16:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6569,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13130:41:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 6570,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "13129:43:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6571,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6817,
                            "src": "13129:47:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13129:52:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13114:67:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 6575,
                      "nodeType": "ExpressionStatement",
                      "src": "13114:67:13"
                    }
                  ]
                },
                "documentation": null,
                "id": 6577,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountOutForTakePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6393,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6380,
                      "name": "tradeDir",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "10859:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6379,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10859:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6382,
                      "name": "amountInOffer",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "10883:18:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6381,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10883:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6384,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "10912:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6383,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10912:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6386,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "10933:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6385,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10933:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6388,
                      "name": "protocolFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "10956:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6387,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10956:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6390,
                      "name": "subsidyFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "10987:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6389,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10987:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6392,
                      "name": "orderAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "11017:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6391,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11017:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "10848:186:13"
                },
                "returnParameters": {
                  "id": 6400,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6395,
                      "name": "amountInUsed",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "11063:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6394,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11063:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6397,
                      "name": "amountOutWithFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "11082:21:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6396,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11082:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6399,
                      "name": "communityFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 6577,
                      "src": "11105:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6398,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11105:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "11062:61:13"
                },
                "scope": 6729,
                "src": "10815:2374:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6727,
                  "nodeType": "Block",
                  "src": "13563:2257:13",
                  "statements": [
                    {
                      "assignments": [
                        6601
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6601,
                          "name": "orderProtocolFeeAmount",
                          "nodeType": "VariableDeclaration",
                          "scope": 6727,
                          "src": "13675:27:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 6600,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13675:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6609,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3130303030",
                            "id": 6607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13742:5:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10000_by_1",
                              "typeString": "int_const 10000"
                            },
                            "value": "10000"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_10000_by_1",
                              "typeString": "int_const 10000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6604,
                                "name": "protocolFeeRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6587,
                                "src": "13721:15:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6602,
                                "name": "orderAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6591,
                                "src": "13705:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6603,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6803,
                              "src": "13705:15:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13705:32:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6817,
                          "src": "13705:36:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13705:43:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13675:73:13"
                    },
                    {
                      "assignments": [
                        6611
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6611,
                          "name": "orderSubsidyFeeAmount",
                          "nodeType": "VariableDeclaration",
                          "scope": 6727,
                          "src": "13759:26:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 6610,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13759:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6619,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "313030",
                            "id": 6617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13835:3:13",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_100_by_1",
                              "typeString": "int_const 100"
                            },
                            "value": "100"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_100_by_1",
                              "typeString": "int_const 100"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6614,
                                "name": "subsidyFeeRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6589,
                                "src": "13815:14:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6612,
                                "name": "orderProtocolFeeAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6601,
                                "src": "13788:22:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6613,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6803,
                              "src": "13788:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13788:42:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6817,
                          "src": "13788:46:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13788:51:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13759:80:13"
                    },
                    {
                      "assignments": [
                        6621
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6621,
                          "name": "orderAmountWithSubsidyFee",
                          "nodeType": "VariableDeclaration",
                          "scope": 6727,
                          "src": "13850:30:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 6620,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13850:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6629,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6626,
                                "name": "orderSubsidyFeeAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6611,
                                "src": "13926:21:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6624,
                                "name": "orderProtocolFeeAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6601,
                                "src": "13899:22:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6625,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6775,
                              "src": "13899:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13899:49:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6622,
                            "name": "orderAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6591,
                            "src": "13883:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6775,
                          "src": "13883:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 6628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13883:66:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13850:99:13"
                    },
                    {
                      "assignments": [
                        6631
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6631,
                          "name": "amountOutWithoutFee",
                          "nodeType": "VariableDeclaration",
                          "scope": 6727,
                          "src": "13960:24:13",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 6630,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "13960:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6632,
                      "initialValue": null,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "13960:24:13"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6633,
                          "name": "orderAmountWithSubsidyFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6621,
                          "src": "13999:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6634,
                          "name": "amountOutExpect",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6581,
                          "src": "14028:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13999:44:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 6699,
                        "nodeType": "Block",
                        "src": "14310:1102:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6657,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6655,
                                "name": "orderAmountWithSubsidyFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6621,
                                "src": "14325:25:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 6656,
                                "name": "amountOutExpect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6581,
                                "src": "14353:15:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "14325:43:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6658,
                            "nodeType": "ExpressionStatement",
                            "src": "14325:43:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6671,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6659,
                                "name": "amountOutWithFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6596,
                                "src": "14634:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6669,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31303030303030",
                                      "id": 6665,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14696:7:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1000000_by_1",
                                        "typeString": "int_const 1000000"
                                      },
                                      "value": "1000000"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6668,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6666,
                                        "name": "protocolFeeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6587,
                                        "src": "14706:15:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6667,
                                        "name": "subsidyFeeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6589,
                                        "src": "14724:14:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "14706:32:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "14696:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31303030303030",
                                        "id": 6662,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14683:7:13",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1000000_by_1",
                                          "typeString": "int_const 1000000"
                                        },
                                        "value": "1000000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1000000_by_1",
                                          "typeString": "int_const 1000000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6660,
                                        "name": "orderAmountWithSubsidyFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6621,
                                        "src": "14653:25:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 6661,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6803,
                                      "src": "14653:29:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6663,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14653:38:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6664,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6817,
                                  "src": "14653:42:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14653:86:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "14634:105:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6672,
                            "nodeType": "ExpressionStatement",
                            "src": "14634:105:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6673,
                                "name": "amountOutWithoutFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6631,
                                "src": "15172:19:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6688,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31303030303030",
                                      "id": 6684,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "15280:7:13",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1000000_by_1",
                                        "typeString": "int_const 1000000"
                                      },
                                      "value": "1000000"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6687,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6685,
                                        "name": "protocolFeeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6587,
                                        "src": "15290:15:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6686,
                                        "name": "subsidyFeeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6589,
                                        "src": "15308:14:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "15290:32:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "15280:42:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6681,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "3130303030",
                                          "id": 6679,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "15233:5:13",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_10000_by_1",
                                            "typeString": "int_const 10000"
                                          },
                                          "value": "10000"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 6680,
                                          "name": "protocolFeeRate",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6587,
                                          "src": "15241:15:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "15233:23:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "313030",
                                            "id": 6676,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15224:3:13",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_100_by_1",
                                              "typeString": "int_const 100"
                                            },
                                            "value": "100"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_100_by_1",
                                              "typeString": "int_const 100"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 6674,
                                            "name": "orderAmountWithSubsidyFee",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6621,
                                            "src": "15194:25:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 6675,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6803,
                                          "src": "15194:29:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 6677,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15194:34:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 6678,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6803,
                                      "src": "15194:38:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6682,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "15194:63:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6683,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6817,
                                  "src": "15194:85:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6689,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15194:129:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15172:151:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6691,
                            "nodeType": "ExpressionStatement",
                            "src": "15172:151:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6692,
                                "name": "communityFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6598,
                                "src": "15338:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6695,
                                    "name": "orderAmountWithSubsidyFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6621,
                                    "src": "15374:25:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6693,
                                    "name": "amountOutWithFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6596,
                                    "src": "15353:16:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6694,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "15353:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15353:47:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15338:62:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6698,
                            "nodeType": "ExpressionStatement",
                            "src": "15338:62:13"
                          }
                        ]
                      },
                      "id": 6700,
                      "nodeType": "IfStatement",
                      "src": "13995:1417:13",
                      "trueBody": {
                        "id": 6654,
                        "nodeType": "Block",
                        "src": "14045:250:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6636,
                                "name": "amountOutWithFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6596,
                                "src": "14087:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 6637,
                                "name": "orderAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6591,
                                "src": "14106:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "14087:30:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6639,
                            "nodeType": "ExpressionStatement",
                            "src": "14087:30:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6640,
                                "name": "communityFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6598,
                                "src": "14132:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6643,
                                    "name": "orderAmountWithSubsidyFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6621,
                                    "src": "14168:25:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6641,
                                    "name": "amountOutWithFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6596,
                                    "src": "14147:16:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6642,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "14147:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14147:47:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "14132:62:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6646,
                            "nodeType": "ExpressionStatement",
                            "src": "14132:62:13"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6647,
                                "name": "amountOutWithoutFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6631,
                                "src": "14209:19:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6650,
                                    "name": "orderSubsidyFeeAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6611,
                                    "src": "14261:21:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6648,
                                    "name": "orderAmountWithSubsidyFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6621,
                                    "src": "14231:25:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6649,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6775,
                                  "src": "14231:29:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6651,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14231:52:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "14209:74:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6653,
                            "nodeType": "ExpressionStatement",
                            "src": "14209:74:13"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6701,
                          "name": "tradeDir",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6579,
                          "src": "15428:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6702,
                          "name": "LIMIT_BUY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5381,
                          "src": "15440:9:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15428:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6713,
                            "name": "tradeDir",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6579,
                            "src": "15679:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6714,
                            "name": "LIMIT_SELL",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5384,
                            "src": "15691:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15679:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6725,
                        "nodeType": "IfStatement",
                        "src": "15675:138:13",
                        "trueBody": {
                          "id": 6724,
                          "nodeType": "Block",
                          "src": "15703:110:13",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6722,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6716,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6594,
                                  "src": "15718:8:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6718,
                                      "name": "amountOutWithoutFee",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6631,
                                      "src": "15765:19:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6719,
                                      "name": "price",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6583,
                                      "src": "15786:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 6720,
                                      "name": "decimal",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6585,
                                      "src": "15793:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 6717,
                                    "name": "getBaseAmountWithQuoteAmountAtPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5498,
                                    "src": "15729:35:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6721,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15729:72:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15718:83:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6723,
                              "nodeType": "ExpressionStatement",
                              "src": "15718:83:13"
                            }
                          ]
                        }
                      },
                      "id": 6726,
                      "nodeType": "IfStatement",
                      "src": "15424:389:13",
                      "trueBody": {
                        "id": 6712,
                        "nodeType": "Block",
                        "src": "15451:110:13",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 6710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 6704,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6594,
                                "src": "15466:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6706,
                                    "name": "amountOutWithoutFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6631,
                                    "src": "15513:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6707,
                                    "name": "price",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6583,
                                    "src": "15534:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6708,
                                    "name": "decimal",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6585,
                                    "src": "15541:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6705,
                                  "name": "getQuoteAmountWithBaseAmountAtPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5474,
                                  "src": "15477:35:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15477:72:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "15466:83:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6711,
                            "nodeType": "ExpressionStatement",
                            "src": "15466:83:13"
                          }
                        ]
                      }
                    }
                  ]
                },
                "documentation": null,
                "id": 6728,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "getAmountInForTakePrice",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6592,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6579,
                      "name": "tradeDir",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13300:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6578,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13300:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6581,
                      "name": "amountOutExpect",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13324:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6580,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13324:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6583,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13355:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6582,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13355:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6585,
                      "name": "decimal",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13376:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6584,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13376:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6587,
                      "name": "protocolFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13399:20:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6586,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13399:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6589,
                      "name": "subsidyFeeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13430:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6588,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13430:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6591,
                      "name": "orderAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13460:16:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6590,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13460:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13289:188:13"
                },
                "returnParameters": {
                  "id": 6599,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6594,
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13506:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6593,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13506:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6596,
                      "name": "amountOutWithFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13521:21:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6595,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13521:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6598,
                      "name": "communityFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 6728,
                      "src": "13544:17:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6597,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13544:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "13505:57:13"
                },
                "scope": 6729,
                "src": "13257:2563:13",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 6730,
            "src": "256:15567:13"
          }
        ],
        "src": "0:15823:13"
      }
    },
    "contracts/libraries/SafeMath.sol": {
      "id": 14,
      "AST": {
        "absolutePath": "contracts/libraries/SafeMath.sol",
        "exportedSymbols": {
          "SafeMath": [
            6818
          ]
        },
        "id": 6819,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 6731,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:14"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "library",
            "documentation": null,
            "fullyImplemented": true,
            "id": 6818,
            "linearizedBaseContracts": [
              6818
            ],
            "name": "SafeMath",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "body": {
                  "id": 6752,
                  "nodeType": "Block",
                  "src": "220:68:14",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6748,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 6745,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 6741,
                                    "name": "z",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6738,
                                    "src": "240:1:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6744,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6742,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6733,
                                      "src": "244:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6743,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6735,
                                      "src": "248:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "244:5:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "240:9:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 6746,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "239:11:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 6747,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6733,
                              "src": "254:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "239:16:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "64732d6d6174682d6164642d6f766572666c6f77",
                            "id": 6749,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "257:22:14",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_3903056b84ed2aba2be78662dc6c5c99b160cebe9af9bd9493d0fc28ff16f6db",
                              "typeString": "literal_string \"ds-math-add-overflow\""
                            },
                            "value": "ds-math-add-overflow"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_3903056b84ed2aba2be78662dc6c5c99b160cebe9af9bd9493d0fc28ff16f6db",
                              "typeString": "literal_string \"ds-math-add-overflow\""
                            }
                          ],
                          "id": 6740,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "231:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "231:49:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6751,
                      "nodeType": "ExpressionStatement",
                      "src": "231:49:14"
                    }
                  ]
                },
                "documentation": null,
                "id": 6753,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "add",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6736,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6733,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 6753,
                      "src": "173:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6732,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "173:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6735,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 6753,
                      "src": "181:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6734,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "181:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "172:16:14"
                },
                "returnParameters": {
                  "id": 6739,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6738,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 6753,
                      "src": "212:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6737,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "212:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "211:8:14"
                },
                "scope": 6818,
                "src": "160:128:14",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6774,
                  "nodeType": "Block",
                  "src": "356:69:14",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 6767,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 6763,
                                    "name": "z",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6760,
                                    "src": "376:1:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6766,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6764,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6755,
                                      "src": "380:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6765,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6757,
                                      "src": "384:1:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "380:5:14",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "376:9:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 6768,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "375:11:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 6769,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6755,
                              "src": "390:1:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "375:16:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "64732d6d6174682d7375622d756e646572666c6f77",
                            "id": 6771,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "393:23:14",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_03b20b9f6e6e7905f077509fd420fb44afc685f254bcefe49147296e1ba25590",
                              "typeString": "literal_string \"ds-math-sub-underflow\""
                            },
                            "value": "ds-math-sub-underflow"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_03b20b9f6e6e7905f077509fd420fb44afc685f254bcefe49147296e1ba25590",
                              "typeString": "literal_string \"ds-math-sub-underflow\""
                            }
                          ],
                          "id": 6762,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "367:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "367:50:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6773,
                      "nodeType": "ExpressionStatement",
                      "src": "367:50:14"
                    }
                  ]
                },
                "documentation": null,
                "id": 6775,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "sub",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6758,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6755,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 6775,
                      "src": "309:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6754,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "309:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6757,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 6775,
                      "src": "317:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6756,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "317:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "308:16:14"
                },
                "returnParameters": {
                  "id": 6761,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6760,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 6775,
                      "src": "348:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6759,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "348:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "347:8:14"
                },
                "scope": 6818,
                "src": "296:129:14",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6802,
                  "nodeType": "Block",
                  "src": "493:82:14",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 6798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6787,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 6785,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6779,
                                "src": "512:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6786,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "517:1:14",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "512:6:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6797,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6795,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 6792,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 6788,
                                        "name": "z",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6782,
                                        "src": "523:1:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 6791,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 6789,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6777,
                                          "src": "527:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 6790,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6779,
                                          "src": "531:1:14",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "527:5:14",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "523:9:14",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6793,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "522:11:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 6794,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6779,
                                  "src": "536:1:14",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "522:15:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6796,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6777,
                                "src": "541:1:14",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "522:20:14",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "512:30:14",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "64732d6d6174682d6d756c2d6f766572666c6f77",
                            "id": 6799,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "544:22:14",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_25a0ef6406c6af6852555433653ce478274cd9f03a5dec44d001868a76b3bfdd",
                              "typeString": "literal_string \"ds-math-mul-overflow\""
                            },
                            "value": "ds-math-mul-overflow"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_25a0ef6406c6af6852555433653ce478274cd9f03a5dec44d001868a76b3bfdd",
                              "typeString": "literal_string \"ds-math-mul-overflow\""
                            }
                          ],
                          "id": 6784,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "504:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "504:63:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6801,
                      "nodeType": "ExpressionStatement",
                      "src": "504:63:14"
                    }
                  ]
                },
                "documentation": null,
                "id": 6803,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "mul",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6780,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6777,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 6803,
                      "src": "446:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6776,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "446:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6779,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 6803,
                      "src": "454:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6778,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "454:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "445:16:14"
                },
                "returnParameters": {
                  "id": 6783,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6782,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 6803,
                      "src": "485:6:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6781,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "485:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "484:8:14"
                },
                "scope": 6818,
                "src": "433:142:14",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6816,
                  "nodeType": "Block",
                  "src": "650:31:14",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6812,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6805,
                          "src": "668:1:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 6813,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6807,
                          "src": "672:1:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "668:5:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "functionReturnParameters": 6811,
                      "id": 6815,
                      "nodeType": "Return",
                      "src": "661:12:14"
                    }
                  ]
                },
                "documentation": null,
                "id": 6817,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "div",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6808,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6805,
                      "name": "a",
                      "nodeType": "VariableDeclaration",
                      "scope": 6817,
                      "src": "596:9:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6804,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "596:7:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6807,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 6817,
                      "src": "607:9:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6806,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "607:7:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "595:22:14"
                },
                "returnParameters": {
                  "id": 6811,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6810,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 6817,
                      "src": "641:7:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6809,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "641:7:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "640:9:14"
                },
                "scope": 6818,
                "src": "583:98:14",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 6819,
            "src": "136:548:14"
          }
        ],
        "src": "0:686:14"
      }
    },
    "contracts/libraries/TransferHelper.sol": {
      "id": 15,
      "AST": {
        "absolutePath": "contracts/libraries/TransferHelper.sol",
        "exportedSymbols": {
          "TransferHelper": [
            6976
          ]
        },
        "id": 6977,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 6820,
            "literals": [
              "solidity",
              ">=",
              "0.5",
              ".0"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:15"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "library",
            "documentation": null,
            "fullyImplemented": true,
            "id": 6976,
            "linearizedBaseContracts": [
              6976
            ],
            "name": "TransferHelper",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "body": {
                  "id": 6861,
                  "nodeType": "Block",
                  "src": "239:289:15",
                  "statements": [
                    {
                      "assignments": [
                        6830,
                        6832
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6830,
                          "name": "success",
                          "nodeType": "VariableDeclaration",
                          "scope": 6861,
                          "src": "317:12:15",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 6829,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "317:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 6832,
                          "name": "data",
                          "nodeType": "VariableDeclaration",
                          "scope": 6861,
                          "src": "331:17:15",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes"
                          },
                          "typeName": {
                            "id": 6831,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "331:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6842,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783039356561376233",
                                "id": 6837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "386:10:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_157198259_by_1",
                                  "typeString": "int_const 157198259"
                                },
                                "value": "0x095ea7b3"
                              },
                              {
                                "argumentTypes": null,
                                "id": 6838,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6824,
                                "src": "398:2:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6839,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6826,
                                "src": "402:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_157198259_by_1",
                                  "typeString": "int_const 157198259"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6835,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7280,
                                "src": "363:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 6836,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodeWithSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "363:22:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes4) pure returns (bytes memory)"
                              }
                            },
                            "id": 6840,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "363:45:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6833,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6822,
                            "src": "352:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "352:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 6841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "352:57:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "tuple(bool,bytes memory)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "316:93:15"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 6857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 6844,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6830,
                              "src": "428:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 6855,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6848,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6845,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6832,
                                        "src": "440:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 6846,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "440:11:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 6847,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "455:1:15",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "440:16:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6851,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6832,
                                        "src": "471:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 6852,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "478:4:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": "bool"
                                          }
                                        ],
                                        "id": 6853,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "477:6:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6849,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7280,
                                        "src": "460:3:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 6850,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "460:10:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 6854,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "460:24:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "440:44:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 6856,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "439:46:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "428:57:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5472616e7366657248656c7065723a20415050524f56455f4641494c4544",
                            "id": 6858,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "487:32:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_3e27be550bb5367a6d8a8b2dd8b5c52ee0710d2d5b26de50062207957ab5bd00",
                              "typeString": "literal_string \"TransferHelper: APPROVE_FAILED\""
                            },
                            "value": "TransferHelper: APPROVE_FAILED"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_3e27be550bb5367a6d8a8b2dd8b5c52ee0710d2d5b26de50062207957ab5bd00",
                              "typeString": "literal_string \"TransferHelper: APPROVE_FAILED\""
                            }
                          ],
                          "id": 6843,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "420:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6859,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "420:100:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6860,
                      "nodeType": "ExpressionStatement",
                      "src": "420:100:15"
                    }
                  ]
                },
                "documentation": null,
                "id": 6862,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "safeApprove",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6827,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6822,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 6862,
                      "src": "191:13:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6821,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "191:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6824,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 6862,
                      "src": "206:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6823,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "206:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6826,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6862,
                      "src": "218:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6825,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "218:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "190:39:15"
                },
                "returnParameters": {
                  "id": 6828,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "239:0:15"
                },
                "scope": 6976,
                "src": "170:358:15",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6903,
                  "nodeType": "Block",
                  "src": "606:291:15",
                  "statements": [
                    {
                      "assignments": [
                        6872,
                        6874
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6872,
                          "name": "success",
                          "nodeType": "VariableDeclaration",
                          "scope": 6903,
                          "src": "685:12:15",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 6871,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "685:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 6874,
                          "name": "data",
                          "nodeType": "VariableDeclaration",
                          "scope": 6903,
                          "src": "699:17:15",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes"
                          },
                          "typeName": {
                            "id": 6873,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "699:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6884,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30786139303539636262",
                                "id": 6879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "754:10:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2835717307_by_1",
                                  "typeString": "int_const 2835717307"
                                },
                                "value": "0xa9059cbb"
                              },
                              {
                                "argumentTypes": null,
                                "id": 6880,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6866,
                                "src": "766:2:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6881,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6868,
                                "src": "770:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_2835717307_by_1",
                                  "typeString": "int_const 2835717307"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6877,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7280,
                                "src": "731:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 6878,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodeWithSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "731:22:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes4) pure returns (bytes memory)"
                              }
                            },
                            "id": 6882,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "731:45:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6875,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6864,
                            "src": "720:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "720:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 6883,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "720:57:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "tuple(bool,bytes memory)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "684:93:15"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 6899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 6886,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6872,
                              "src": "796:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 6897,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6890,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6887,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6874,
                                        "src": "808:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 6888,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "808:11:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 6889,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "823:1:15",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "808:16:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6893,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6874,
                                        "src": "839:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 6894,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "846:4:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": "bool"
                                          }
                                        ],
                                        "id": 6895,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "845:6:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6891,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7280,
                                        "src": "828:3:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 6892,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "828:10:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 6896,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "828:24:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "808:44:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 6898,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "807:46:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "796:57:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5472616e7366657248656c7065723a205452414e534645525f4641494c4544",
                            "id": 6900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "855:33:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_05d7eee434319ef96b9de8eaf182057f1e6a6441451c0ddc676469e4b256f426",
                              "typeString": "literal_string \"TransferHelper: TRANSFER_FAILED\""
                            },
                            "value": "TransferHelper: TRANSFER_FAILED"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_05d7eee434319ef96b9de8eaf182057f1e6a6441451c0ddc676469e4b256f426",
                              "typeString": "literal_string \"TransferHelper: TRANSFER_FAILED\""
                            }
                          ],
                          "id": 6885,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "788:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "788:101:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6902,
                      "nodeType": "ExpressionStatement",
                      "src": "788:101:15"
                    }
                  ]
                },
                "documentation": null,
                "id": 6904,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "safeTransfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6869,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6864,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 6904,
                      "src": "558:13:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6863,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "558:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6866,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 6904,
                      "src": "573:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6865,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "573:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6868,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6904,
                      "src": "585:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6867,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "585:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "557:39:15"
                },
                "returnParameters": {
                  "id": 6870,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "606:0:15"
                },
                "scope": 6976,
                "src": "536:361:15",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6948,
                  "nodeType": "Block",
                  "src": "993:314:15",
                  "statements": [
                    {
                      "assignments": [
                        6916,
                        6918
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6916,
                          "name": "success",
                          "nodeType": "VariableDeclaration",
                          "scope": 6948,
                          "src": "1084:12:15",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 6915,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "1084:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 6918,
                          "name": "data",
                          "nodeType": "VariableDeclaration",
                          "scope": 6948,
                          "src": "1098:17:15",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes"
                          },
                          "typeName": {
                            "id": 6917,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "1098:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        }
                      ],
                      "id": 6929,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30783233623837326464",
                                "id": 6923,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1153:10:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_599290589_by_1",
                                  "typeString": "int_const 599290589"
                                },
                                "value": "0x23b872dd"
                              },
                              {
                                "argumentTypes": null,
                                "id": 6924,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6908,
                                "src": "1165:4:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6925,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6910,
                                "src": "1171:2:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6926,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6912,
                                "src": "1175:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_599290589_by_1",
                                  "typeString": "int_const 599290589"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6921,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7280,
                                "src": "1130:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 6922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodeWithSelector",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1130:22:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes4) pure returns (bytes memory)"
                              }
                            },
                            "id": 6927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1130:51:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6919,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6906,
                            "src": "1119:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6920,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1119:10:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 6928,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1119:63:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "tuple(bool,bytes memory)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1083:99:15"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 6944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 6931,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6916,
                              "src": "1201:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 6942,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6935,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6932,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6918,
                                        "src": "1213:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 6933,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1213:11:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 6934,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1228:1:15",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1213:16:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6938,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6918,
                                        "src": "1244:4:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 6939,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "1251:4:15",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": "bool"
                                          }
                                        ],
                                        "id": 6940,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1250:6:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6936,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7280,
                                        "src": "1233:3:15",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 6937,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1233:10:15",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 6941,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1233:24:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "1213:44:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 6943,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1212:46:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "1201:57:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544",
                            "id": 6945,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1260:38:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_eb2904bf3c0c9ae693b53eb0188a703c388998a9c405b7965ca678cef9a51d18",
                              "typeString": "literal_string \"TransferHelper: TRANSFER_FROM_FAILED\""
                            },
                            "value": "TransferHelper: TRANSFER_FROM_FAILED"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_eb2904bf3c0c9ae693b53eb0188a703c388998a9c405b7965ca678cef9a51d18",
                              "typeString": "literal_string \"TransferHelper: TRANSFER_FROM_FAILED\""
                            }
                          ],
                          "id": 6930,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1193:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1193:106:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6947,
                      "nodeType": "ExpressionStatement",
                      "src": "1193:106:15"
                    }
                  ]
                },
                "documentation": null,
                "id": 6949,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "safeTransferFrom",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6913,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6906,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 6949,
                      "src": "931:13:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6905,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "931:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6908,
                      "name": "from",
                      "nodeType": "VariableDeclaration",
                      "scope": 6949,
                      "src": "946:12:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6907,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "946:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6910,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 6949,
                      "src": "960:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6909,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "960:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6912,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6949,
                      "src": "972:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6911,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "972:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "930:53:15"
                },
                "returnParameters": {
                  "id": 6914,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "993:0:15"
                },
                "scope": 6976,
                "src": "905:402:15",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6974,
                  "nodeType": "Block",
                  "src": "1373:137:15",
                  "statements": [
                    {
                      "assignments": [
                        6957,
                        null
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 6957,
                          "name": "success",
                          "nodeType": "VariableDeclaration",
                          "scope": 6974,
                          "src": "1385:12:15",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "typeName": {
                            "id": 6956,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "1385:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "value": null,
                          "visibility": "internal"
                        },
                        null
                      ],
                      "id": 6968,
                      "initialValue": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1433:1:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6964,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "1423:9:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                                "typeString": "function (uint256) pure returns (bytes memory)"
                              },
                              "typeName": {
                                "id": 6963,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "1427:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_storage_ptr",
                                  "typeString": "bytes"
                                }
                              }
                            },
                            "id": 6966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1423:12:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory",
                              "typeString": "bytes memory"
                            }
                          ],
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6961,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6953,
                              "src": "1416:5:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6958,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6951,
                                "src": "1402:2:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 6959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1402:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 6960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1402:13:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                              "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                            }
                          },
                          "id": 6962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1402:20:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 6967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1402:34:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "tuple(bool,bytes memory)"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1384:52:15"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6970,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6957,
                            "src": "1455:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544",
                            "id": 6971,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1464:37:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_d290720a9b119bbeaf8124eb771e119cbea85a2f430cbb39a8fead2398528881",
                              "typeString": "literal_string \"TransferHelper: ETH_TRANSFER_FAILED\""
                            },
                            "value": "TransferHelper: ETH_TRANSFER_FAILED"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_d290720a9b119bbeaf8124eb771e119cbea85a2f430cbb39a8fead2398528881",
                              "typeString": "literal_string \"TransferHelper: ETH_TRANSFER_FAILED\""
                            }
                          ],
                          "id": 6969,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1447:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 6972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1447:55:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 6973,
                      "nodeType": "ExpressionStatement",
                      "src": "1447:55:15"
                    }
                  ]
                },
                "documentation": null,
                "id": 6975,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "safeTransferETH",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6954,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6951,
                      "name": "to",
                      "nodeType": "VariableDeclaration",
                      "scope": 6975,
                      "src": "1340:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6950,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1340:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 6953,
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "scope": 6975,
                      "src": "1352:10:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6952,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1352:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1339:24:15"
                },
                "returnParameters": {
                  "id": 6955,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1373:0:15"
                },
                "scope": 6976,
                "src": "1315:195:15",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 6977,
            "src": "140:1373:15"
          }
        ],
        "src": "0:1513:15"
      }
    },
    "contracts/libraries/UQ112x112.sol": {
      "id": 16,
      "AST": {
        "absolutePath": "contracts/libraries/UQ112x112.sol",
        "exportedSymbols": {
          "UQ112x112": [
            7036
          ]
        },
        "id": 7037,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 6978,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "0:24:16"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "library",
            "documentation": null,
            "fullyImplemented": true,
            "id": 7036,
            "linearizedBaseContracts": [
              7036
            ],
            "name": "UQ112x112",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "constant": true,
                "id": 6983,
                "name": "Q112",
                "nodeType": "VariableDeclaration",
                "scope": 7036,
                "src": "215:30:16",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint224",
                  "typeString": "uint224"
                },
                "typeName": {
                  "id": 6979,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "215:7:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1",
                    "typeString": "int_const 5192...(26 digits omitted)...0096"
                  },
                  "id": 6982,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "leftExpression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "239:1:16",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "nodeType": "BinaryOperation",
                  "operator": "**",
                  "rightExpression": {
                    "argumentTypes": null,
                    "hexValue": "313132",
                    "id": 6981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "242:3:16",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_112_by_1",
                      "typeString": "int_const 112"
                    },
                    "value": "112"
                  },
                  "src": "239:6:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1",
                    "typeString": "int_const 5192...(26 digits omitted)...0096"
                  }
                },
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 6998,
                  "nodeType": "Block",
                  "src": "355:59:16",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 6996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 6990,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6988,
                          "src": "366:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "id": 6995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6992,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6985,
                                "src": "378:1:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              ],
                              "id": 6991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "370:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint224_$",
                                "typeString": "type(uint224)"
                              },
                              "typeName": "uint224"
                            },
                            "id": 6993,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "370:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6994,
                            "name": "Q112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6983,
                            "src": "383:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "370:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "366:21:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "id": 6997,
                      "nodeType": "ExpressionStatement",
                      "src": "366:21:16"
                    }
                  ]
                },
                "documentation": null,
                "id": 6999,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "encode",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 6986,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6985,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 6999,
                      "src": "310:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 6984,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "310:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "309:11:16"
                },
                "returnParameters": {
                  "id": 6989,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 6988,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 6999,
                      "src": "344:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 6987,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "344:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "343:11:16"
                },
                "scope": 7036,
                "src": "294:120:16",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 7016,
                  "nodeType": "Block",
                  "src": "556:37:16",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 7008,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7006,
                          "src": "567:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "id": 7013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7009,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7001,
                            "src": "571:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7011,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7003,
                                "src": "583:1:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              ],
                              "id": 7010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "575:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint224_$",
                                "typeString": "type(uint224)"
                              },
                              "typeName": "uint224"
                            },
                            "id": 7012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "575:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "571:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "567:18:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "id": 7015,
                      "nodeType": "ExpressionStatement",
                      "src": "567:18:16"
                    }
                  ]
                },
                "documentation": null,
                "id": 7017,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "uqdiv",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7004,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7001,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 7017,
                      "src": "500:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 7000,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "500:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7003,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 7017,
                      "src": "511:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 7002,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "511:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "499:22:16"
                },
                "returnParameters": {
                  "id": 7007,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7006,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 7017,
                      "src": "545:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 7005,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "545:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "544:11:16"
                },
                "scope": 7036,
                "src": "485:108:16",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              },
              {
                "body": {
                  "id": 7034,
                  "nodeType": "Block",
                  "src": "735:37:16",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "id": 7026,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7024,
                          "src": "746:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "id": 7031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7027,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7019,
                            "src": "750:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7029,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7021,
                                "src": "762:1:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint112",
                                  "typeString": "uint112"
                                }
                              ],
                              "id": 7028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "754:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint224_$",
                                "typeString": "type(uint224)"
                              },
                              "typeName": "uint224"
                            },
                            "id": 7030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "754:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "750:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "746:18:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "id": 7033,
                      "nodeType": "ExpressionStatement",
                      "src": "746:18:16"
                    }
                  ]
                },
                "documentation": null,
                "id": 7035,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "uqmul",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7022,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7019,
                      "name": "x",
                      "nodeType": "VariableDeclaration",
                      "scope": 7035,
                      "src": "679:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 7018,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "679:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7021,
                      "name": "y",
                      "nodeType": "VariableDeclaration",
                      "scope": 7035,
                      "src": "690:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 7020,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "690:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "678:22:16"
                },
                "returnParameters": {
                  "id": 7025,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7024,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 7035,
                      "src": "724:9:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 7023,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "724:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "723:11:16"
                },
                "scope": 7036,
                "src": "664:108:16",
                "stateMutability": "pure",
                "superFunction": null,
                "visibility": "internal"
              }
            ],
            "scope": 7037,
            "src": "190:585:16"
          }
        ],
        "src": "0:777:16"
      }
    },
    "contracts/test/WETH9.sol": {
      "id": 17,
      "AST": {
        "absolutePath": "contracts/test/WETH9.sol",
        "exportedSymbols": {
          "WETH9": [
            7278
          ]
        },
        "id": 7279,
        "nodeType": "SourceUnit",
        "nodes": [
          {
            "id": 7038,
            "literals": [
              "solidity",
              "=",
              "0.5",
              ".16"
            ],
            "nodeType": "PragmaDirective",
            "src": "701:24:17"
          },
          {
            "baseContracts": [],
            "contractDependencies": [],
            "contractKind": "contract",
            "documentation": null,
            "fullyImplemented": true,
            "id": 7278,
            "linearizedBaseContracts": [
              7278
            ],
            "name": "WETH9",
            "nodeType": "ContractDefinition",
            "nodes": [
              {
                "constant": false,
                "id": 7041,
                "name": "name",
                "nodeType": "VariableDeclaration",
                "scope": 7278,
                "src": "751:39:17",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 7039,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "751:6:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "5772617070656420524f5345",
                  "id": 7040,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "776:14:17",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_9c4110fe0a17c06c6ebdce4f1417d88ada5a91b6d8072317dea2e211d78dbe3f",
                    "typeString": "literal_string \"Wrapped ROSE\""
                  },
                  "value": "Wrapped ROSE"
                },
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 7044,
                "name": "symbol",
                "nodeType": "VariableDeclaration",
                "scope": 7278,
                "src": "797:32:17",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 7042,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "797:6:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "57524f5345",
                  "id": 7043,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "822:7:17",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_ee9d92e8a0a1375f4315678af9a4094696fdcc14fc67b8be5d18aeb3e344f677",
                    "typeString": "literal_string \"WROSE\""
                  },
                  "value": "WROSE"
                },
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 7047,
                "name": "decimals",
                "nodeType": "VariableDeclaration",
                "scope": 7278,
                "src": "836:27:17",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 7045,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "836:5:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": {
                  "argumentTypes": null,
                  "hexValue": "3138",
                  "id": 7046,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "861:2:17",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_18_by_1",
                    "typeString": "int_const 18"
                  },
                  "value": "18"
                },
                "visibility": "public"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 7055,
                "name": "Approval",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 7054,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7049,
                      "indexed": true,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7055,
                      "src": "888:19:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7048,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "888:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7051,
                      "indexed": true,
                      "name": "guy",
                      "nodeType": "VariableDeclaration",
                      "scope": 7055,
                      "src": "909:19:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7050,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "909:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7053,
                      "indexed": false,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7055,
                      "src": "930:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7052,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "930:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "887:52:17"
                },
                "src": "872:68:17"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 7063,
                "name": "Transfer",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 7062,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7057,
                      "indexed": true,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7063,
                      "src": "962:19:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7056,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "962:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7059,
                      "indexed": true,
                      "name": "dst",
                      "nodeType": "VariableDeclaration",
                      "scope": 7063,
                      "src": "983:19:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7058,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "983:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7061,
                      "indexed": false,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7063,
                      "src": "1004:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7060,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1004:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "961:52:17"
                },
                "src": "946:68:17"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 7069,
                "name": "Deposit",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 7068,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7065,
                      "indexed": true,
                      "name": "dst",
                      "nodeType": "VariableDeclaration",
                      "scope": 7069,
                      "src": "1035:19:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7064,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1035:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7067,
                      "indexed": false,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7069,
                      "src": "1056:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7066,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1056:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1034:31:17"
                },
                "src": "1020:46:17"
              },
              {
                "anonymous": false,
                "documentation": null,
                "id": 7075,
                "name": "Withdrawal",
                "nodeType": "EventDefinition",
                "parameters": {
                  "id": 7074,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7071,
                      "indexed": true,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7075,
                      "src": "1090:19:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7070,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1090:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7073,
                      "indexed": false,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7075,
                      "src": "1111:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7072,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1111:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1089:31:17"
                },
                "src": "1072:49:17"
              },
              {
                "constant": false,
                "id": 7079,
                "name": "balanceOf",
                "nodeType": "VariableDeclaration",
                "scope": 7278,
                "src": "1129:65:17",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 7078,
                  "keyType": {
                    "id": 7076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1138:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1129:25:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 7077,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1149:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "constant": false,
                "id": 7085,
                "name": "allowance",
                "nodeType": "VariableDeclaration",
                "scope": 7278,
                "src": "1201:65:17",
                "stateVariable": true,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                  "typeString": "mapping(address => mapping(address => uint256))"
                },
                "typeName": {
                  "id": 7084,
                  "keyType": {
                    "id": 7080,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1210:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1201:46:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "valueType": {
                    "id": 7083,
                    "keyType": {
                      "id": 7081,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1230:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1221:25:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 7082,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "1241:4:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 7103,
                  "nodeType": "Block",
                  "src": "1378:99:17",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7094,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7088,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7079,
                            "src": "1389:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7091,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7089,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1399:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7090,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1399:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "1389:21:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7092,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7293,
                            "src": "1414:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 7093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1414:9:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1389:34:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7095,
                      "nodeType": "ExpressionStatement",
                      "src": "1389:34:17"
                    },
                    {
                      "eventCall": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7097,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1447:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7098,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1447:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7099,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1459:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1459:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 7096,
                          "name": "Deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7069,
                          "src": "1439:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,uint256)"
                          }
                        },
                        "id": 7101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1439:30:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7102,
                      "nodeType": "EmitStatement",
                      "src": "1434:35:17"
                    }
                  ]
                },
                "documentation": null,
                "id": 7104,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "deposit",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7086,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1360:2:17"
                },
                "returnParameters": {
                  "id": 7087,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1378:0:17"
                },
                "scope": 7278,
                "src": "1344:133:17",
                "stateMutability": "payable",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 7140,
                  "nodeType": "Block",
                  "src": "1518:177:17",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7110,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7079,
                                "src": "1537:9:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7113,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7111,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7293,
                                  "src": "1547:3:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7112,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1547:10:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1537:21:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 7114,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7106,
                              "src": "1562:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1537:28:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "",
                            "id": 7116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1567:2:17",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            }
                          ],
                          "id": 7109,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "1529:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 7117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1529:41:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7118,
                      "nodeType": "ExpressionStatement",
                      "src": "1529:41:17"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7124,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7119,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7079,
                            "src": "1581:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7122,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7120,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1591:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7121,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1591:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "1581:21:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 7123,
                          "name": "wad",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7106,
                          "src": "1606:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1581:28:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7125,
                      "nodeType": "ExpressionStatement",
                      "src": "1581:28:17"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7131,
                            "name": "wad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7106,
                            "src": "1640:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7126,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1620:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1620:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "id": 7130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1620:19:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                            "typeString": "function (uint256)"
                          }
                        },
                        "id": 7132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1620:24:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7133,
                      "nodeType": "ExpressionStatement",
                      "src": "1620:24:17"
                    },
                    {
                      "eventCall": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7135,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1671:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1671:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7137,
                            "name": "wad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7106,
                            "src": "1683:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 7134,
                          "name": "Withdrawal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7075,
                          "src": "1660:10:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,uint256)"
                          }
                        },
                        "id": 7138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1660:27:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7139,
                      "nodeType": "EmitStatement",
                      "src": "1655:32:17"
                    }
                  ]
                },
                "documentation": null,
                "id": 7141,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "withdraw",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7107,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7106,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7141,
                      "src": "1501:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7105,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1501:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1500:10:17"
                },
                "returnParameters": {
                  "id": 7108,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1518:0:17"
                },
                "scope": 7278,
                "src": "1483:212:17",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 7151,
                  "nodeType": "Block",
                  "src": "1753:47:17",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7147,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7341,
                              "src": "1779:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_WETH9_$7278",
                                "typeString": "contract WETH9"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_WETH9_$7278",
                                "typeString": "contract WETH9"
                              }
                            ],
                            "id": 7146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1771:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7148,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1771:13:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1771:21:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "functionReturnParameters": 7145,
                      "id": 7150,
                      "nodeType": "Return",
                      "src": "1764:28:17"
                    }
                  ]
                },
                "documentation": null,
                "id": 7152,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "totalSupply",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7142,
                  "nodeType": "ParameterList",
                  "parameters": [],
                  "src": "1723:2:17"
                },
                "returnParameters": {
                  "id": 7145,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7144,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 7152,
                      "src": "1747:4:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7143,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1747:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1746:6:17"
                },
                "scope": 7278,
                "src": "1703:97:17",
                "stateMutability": "view",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 7179,
                  "nodeType": "Block",
                  "src": "1870:119:17",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7161,
                              "name": "allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7085,
                              "src": "1881:9:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 7165,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7162,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "1891:3:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1891:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1881:21:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7166,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7164,
                            "name": "guy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7154,
                            "src": "1903:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "1881:26:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 7167,
                          "name": "wad",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7156,
                          "src": "1910:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1881:32:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7169,
                      "nodeType": "ExpressionStatement",
                      "src": "1881:32:17"
                    },
                    {
                      "eventCall": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7171,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "1938:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7172,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1938:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7173,
                            "name": "guy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7154,
                            "src": "1950:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7174,
                            "name": "wad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7156,
                            "src": "1955:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 7170,
                          "name": "Approval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7055,
                          "src": "1929:8:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 7175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1929:30:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7176,
                      "nodeType": "EmitStatement",
                      "src": "1924:35:17"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 7177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1977:4:17",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      "functionReturnParameters": 7160,
                      "id": 7178,
                      "nodeType": "Return",
                      "src": "1970:11:17"
                    }
                  ]
                },
                "documentation": null,
                "id": 7180,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "approve",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7157,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7154,
                      "name": "guy",
                      "nodeType": "VariableDeclaration",
                      "scope": 7180,
                      "src": "1825:11:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7153,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1825:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7156,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7180,
                      "src": "1838:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7155,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1838:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1824:23:17"
                },
                "returnParameters": {
                  "id": 7160,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7159,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 7180,
                      "src": "1864:4:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7158,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1864:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "1863:6:17"
                },
                "scope": 7278,
                "src": "1808:181:17",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 7196,
                  "nodeType": "Block",
                  "src": "2060:60:17",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7190,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "2091:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7191,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2091:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7192,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7182,
                            "src": "2103:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7193,
                            "name": "wad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7184,
                            "src": "2108:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 7189,
                          "name": "transferFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7277,
                          "src": "2078:12:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 7194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2078:34:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "functionReturnParameters": 7188,
                      "id": 7195,
                      "nodeType": "Return",
                      "src": "2071:41:17"
                    }
                  ]
                },
                "documentation": null,
                "id": 7197,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "transfer",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7185,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7182,
                      "name": "dst",
                      "nodeType": "VariableDeclaration",
                      "scope": 7197,
                      "src": "2015:11:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7181,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2015:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7184,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7197,
                      "src": "2028:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7183,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2028:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2014:23:17"
                },
                "returnParameters": {
                  "id": 7188,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7187,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 7197,
                      "src": "2054:4:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7186,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2054:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2053:6:17"
                },
                "scope": 7278,
                "src": "1997:123:17",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "public"
              },
              {
                "body": {
                  "id": 7276,
                  "nodeType": "Block",
                  "src": "2231:382:17",
                  "statements": [
                    {
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7209,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7079,
                                "src": "2250:9:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7211,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7210,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7199,
                                "src": "2260:3:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2250:14:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 7212,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7203,
                              "src": "2268:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2250:21:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "",
                            "id": 7214,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2273:2:17",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            }
                          ],
                          "id": 7208,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            7296,
                            7297
                          ],
                          "referencedDeclaration": 7297,
                          "src": "2242:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                            "typeString": "function (bool,string memory) pure"
                          }
                        },
                        "id": 7215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2242:34:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7216,
                      "nodeType": "ExpressionStatement",
                      "src": "2242:34:17"
                    },
                    {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7217,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7199,
                            "src": "2293:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7218,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7293,
                              "src": "2300:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2300:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "2293:17:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7221,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7085,
                                "src": "2314:9:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7223,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7222,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7199,
                                "src": "2324:3:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2314:14:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7226,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7224,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7293,
                                "src": "2329:3:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2329:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2314:26:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "-",
                                "prefix": true,
                                "src": "2349:2:17",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 7228,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2350:1:17",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                  "typeString": "int_const -1"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                  "typeString": "int_const -1"
                                }
                              ],
                              "id": 7227,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2344:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint"
                            },
                            "id": 7230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2344:8:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2314:38:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2293:59:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": null,
                      "id": 7255,
                      "nodeType": "IfStatement",
                      "src": "2289:186:17",
                      "trueBody": {
                        "id": 7254,
                        "nodeType": "Block",
                        "src": "2354:121:17",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7241,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 7234,
                                        "name": "allowance",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7085,
                                        "src": "2377:9:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                          "typeString": "mapping(address => mapping(address => uint256))"
                                        }
                                      },
                                      "id": 7236,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 7235,
                                        "name": "src",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7199,
                                        "src": "2387:3:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2377:14:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 7239,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7237,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7293,
                                        "src": "2392:3:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 7238,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "2392:10:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2377:26:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 7240,
                                    "name": "wad",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7203,
                                    "src": "2407:3:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2377:33:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "",
                                  "id": 7242,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2412:2:17",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                    "typeString": "literal_string \"\""
                                  },
                                  "value": ""
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                    "typeString": "literal_string \"\""
                                  }
                                ],
                                "id": 7233,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7296,
                                  7297
                                ],
                                "referencedDeclaration": 7297,
                                "src": "2369:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2369:46:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7244,
                            "nodeType": "ExpressionStatement",
                            "src": "2369:46:17"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 7252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 7245,
                                    "name": "allowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7085,
                                    "src": "2430:9:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 7249,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 7246,
                                    "name": "src",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7199,
                                    "src": "2440:3:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2430:14:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 7250,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7247,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7293,
                                    "src": "2445:3:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2445:10:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2430:26:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "id": 7251,
                                "name": "wad",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7203,
                                "src": "2460:3:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2430:33:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7253,
                            "nodeType": "ExpressionStatement",
                            "src": "2430:33:17"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7256,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7079,
                            "src": "2487:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7258,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7257,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7199,
                            "src": "2497:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2487:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 7259,
                          "name": "wad",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7203,
                          "src": "2505:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2487:21:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7261,
                      "nodeType": "ExpressionStatement",
                      "src": "2487:21:17"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "id": 7266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7262,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7079,
                            "src": "2519:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7264,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7263,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7201,
                            "src": "2529:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "2519:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "argumentTypes": null,
                          "id": 7265,
                          "name": "wad",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7203,
                          "src": "2537:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2519:21:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7267,
                      "nodeType": "ExpressionStatement",
                      "src": "2519:21:17"
                    },
                    {
                      "eventCall": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7269,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7199,
                            "src": "2567:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7270,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7201,
                            "src": "2572:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7271,
                            "name": "wad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7203,
                            "src": "2577:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 7268,
                          "name": "Transfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7063,
                          "src": "2558:8:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 7272,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2558:23:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 7273,
                      "nodeType": "EmitStatement",
                      "src": "2553:28:17"
                    },
                    {
                      "expression": {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 7274,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2601:4:17",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      "functionReturnParameters": 7207,
                      "id": 7275,
                      "nodeType": "Return",
                      "src": "2594:11:17"
                    }
                  ]
                },
                "documentation": null,
                "id": 7277,
                "implemented": true,
                "kind": "function",
                "modifiers": [],
                "name": "transferFrom",
                "nodeType": "FunctionDefinition",
                "parameters": {
                  "id": 7204,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7199,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7277,
                      "src": "2150:11:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7198,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2150:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7201,
                      "name": "dst",
                      "nodeType": "VariableDeclaration",
                      "scope": 7277,
                      "src": "2163:11:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7200,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2163:7:17",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7203,
                      "name": "wad",
                      "nodeType": "VariableDeclaration",
                      "scope": 7277,
                      "src": "2176:8:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7202,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2176:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2149:36:17"
                },
                "returnParameters": {
                  "id": 7207,
                  "nodeType": "ParameterList",
                  "parameters": [
                    {
                      "constant": false,
                      "id": 7206,
                      "name": "",
                      "nodeType": "VariableDeclaration",
                      "scope": 7277,
                      "src": "2220:4:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7205,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2220:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "src": "2219:6:17"
                },
                "scope": 7278,
                "src": "2128:485:17",
                "stateMutability": "nonpayable",
                "superFunction": null,
                "visibility": "public"
              }
            ],
            "scope": 7279,
            "src": "729:1887:17"
          }
        ],
        "src": "701:1915:17"
      }
    }
  },
  "sourceList": [
    "contracts/OrderBook.sol",
    "contracts/OrderBookBase.sol",
    "contracts/OrderBookFactory.sol",
    "contracts/OrderQueue.sol",
    "contracts/PriceList.sol",
    "contracts/interfaces/IERC20.sol",
    "contracts/interfaces/IOrderBook.sol",
    "contracts/interfaces/IOrderBookFactory.sol",
    "contracts/interfaces/IUniswapV2Factory.sol",
    "contracts/interfaces/IUniswapV2Pair.sol",
    "contracts/interfaces/IWETH.sol",
    "contracts/libraries/Arrays.sol",
    "contracts/libraries/Math.sol",
    "contracts/libraries/OrderBookLibrary.sol",
    "contracts/libraries/SafeMath.sol",
    "contracts/libraries/TransferHelper.sol",
    "contracts/libraries/UQ112x112.sol",
    "contracts/test/WETH9.sol"
  ]
}