{
    "schemaVersion": "2.0.0",
    "contractName": "BasicTradeSubContract",
    "compilerOutput": {
        "abi": [
            {
                "constant": true,
                "inputs": [
                    {
                        "internalType": "bytes",
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "name": "isValid",
                "outputs": [
                    {
                        "internalType": "bool",
                        "name": "",
                        "type": "bool"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "internalType": "bytes",
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "name": "amountRemaining",
                "outputs": [
                    {
                        "internalType": "uint256",
                        "name": "",
                        "type": "uint256"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "arguments",
                "outputs": [
                    {
                        "internalType": "string",
                        "name": "",
                        "type": "string"
                    }
                ],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "internalType": "bytes",
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "name": "participate",
                "outputs": [
                    {
                        "internalType": "bool",
                        "name": "",
                        "type": "bool"
                    }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "inputs": [
                    {
                        "internalType": "string",
                        "name": "args",
                        "type": "string"
                    }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "constructor"
            }
        ],
        "devdoc": {
            "methods": {}
        },
        "evm": {
            "bytecode": {
                "linkReferences": {},
                "object": "0x60806040523480156200001157600080fd5b50604051620010a2380380620010a2833981810160405260208110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b506040525050815162000102915060019060208401906200010a565b5050620001af565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200014d57805160ff19168380011785556200017d565b828001600101855582156200017d579182015b828111156200017d57825182559160200191906001019062000160565b506200018b9291506200018f565b5090565b620001ac91905b808211156200018b576000815560010162000196565b90565b610ee380620001bf6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a03e738146100515780635b2ac04a146100d55780637528de0d14610157578063d7d49123146101d4575b600080fd5b6100c16004803603602081101561006757600080fd5b81019060208101813564010000000081111561008257600080fd5b82018360208201111561009457600080fd5b803590602001918460018302840111640100000000831117156100b657600080fd5b509092509050610244565b604080519115158252519081900360200190f35b610145600480360360208110156100eb57600080fd5b81019060208101813564010000000081111561010657600080fd5b82018360208201111561011857600080fd5b8035906020019184600183028401116401000000008311171561013a57600080fd5b509092509050610490565b60408051918252519081900360200190f35b61015f6106e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100c1600480360360208110156101ea57600080fd5b81019060208101813564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184600183028401116401000000008311171561023957600080fd5b50909250905061077c565b600080610291600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b905060006102df601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b9050600061032d602887878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b9050600061037b604888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b905060006103c9605c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b90506060610417607c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b75169050565b9050600061045a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8a92505050565b9050610467878284610c57565b8015610480575060008181526020819052604090205485115b9750505050505050505b92915050565b6000806104dd600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b9050600061052b601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610579602887878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b905060006105c7604888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610615605c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b90506060610663607c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b75169050565b905060006106a68a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8a92505050565b90506106b3878284610c57565b156106d757600090815260208190526040902054909303955061048a945050505050565b600097505050505050505061048a565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156107725780601f1061074757610100808354040283529160200191610772565b820191906000526020600020905b81548152906001019060200180831161075557829003601f168201915b5050505050905090565b6000806107c9600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610817601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610865602887878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b905060006108b3604888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610901605c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b9050606061094f607c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b75169050565b9050600061099d60bd8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b905060006109e08b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8a92505050565b90506109ed888285610c57565b6109f657600080fd5b6000818152602081905260409020548201861015610a1357600080fd5b604080516323b872dd60e01b81526001600160a01b038a81166004830152326024830152604482018590529151918916916323b872dd916064808201926020929091908290030181600087803b158015610a6c57600080fd5b505af1158015610a80573d6000803e3d6000fd5b505050506040513d6020811015610a9657600080fd5b5051610aa157600080fd5b6000610aae858489610c8f565b604080516323b872dd60e01b81523260048201526001600160a01b038c81166024830152604482018490529151929350908816916323b872dd916064808201926020929091908290030181600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050506040513d6020811015610b3457600080fd5b5051610b3f57600080fd5b600091825260208290526040909120805490910190555060019998505050505050505050565b016014015190565b016020015190565b6060610b8383836041610cb9565b9392505050565b600080610b9d838263ffffffff610b6516565b90506000610bb284601463ffffffff610b6516565b90506000610bc785602863ffffffff610b6d16565b90506000610bdc86604863ffffffff610b6516565b90506000610bf187605c63ffffffff610b6d16565b604080516bffffffffffffffffffffffff19606098891b811660208084019190915297891b8116603483015260488201969096529390961b909316606883015250607c8082019290925283518082039092018252609c0190925281519101209050919050565b6000610c7282610c6685610d43565b9063ffffffff610d9416565b6001600160a01b0316846001600160a01b03161490509392505050565b6000610cb182610ca5868663ffffffff610e6516565b9063ffffffff610e8c16565b949350505050565b606080826040519080825280601f01601f191660200182016040528015610ce7576020820181803883390190505b509050835b848401811015610d3a57858181518110610d0257fe5b602001015160f81c60f81b8286830381518110610d1b57fe5b60200101906001600160f81b031916908160001a905350600101610cec565b50949350505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000806000808451604114610daf576000935050505061048a565b50505060208201516040830151606084015160001a601b811015610dd157601b015b8060ff16601b14158015610de957508060ff16601c14155b15610dfa576000935050505061048a565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610e51573d6000803e3d6000fd5b50505060206040510351935050505061048a565b600082610e745750600061048a565b82820282848281610e8157fe5b0414610b8357600080fd5b6000808211610e9a57600080fd5b6000828481610ea557fe5b0494935050505056fea265627a7a72315820ada0458365836180123d7f697b236488fa45fdf2af5a6cb672465401ddf4ca9964736f6c634300050b0032",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x10A2 CODESIZE SUB DUP1 PUSH3 0x10A2 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 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 PUSH1 0x40 MSTORE POP POP DUP2 MLOAD PUSH3 0x102 SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x10A JUMP JUMPDEST POP POP PUSH3 0x1AF 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 PUSH3 0x14D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x17D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x17D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x17D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP PUSH3 0x18B SWAP3 SWAP2 POP PUSH3 0x18F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x1AC SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x18B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x196 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xEE3 DUP1 PUSH3 0x1BF 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 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA03E738 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x5B2AC04A EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x7528DE0D EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xD7D49123 EQ PUSH2 0x1D4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x244 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15F PUSH2 0x6E7 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 0x199 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x181 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C6 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 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x77C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x291 PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2DF PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x32D PUSH1 0x28 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x37B PUSH1 0x48 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3C9 PUSH1 0x5C DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x417 PUSH1 0x7C DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB75 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x45A DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0xB8A SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x467 DUP8 DUP3 DUP5 PUSH2 0xC57 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x480 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 GT JUMPDEST SWAP8 POP POP POP POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4DD PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x52B PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x579 PUSH1 0x28 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5C7 PUSH1 0x48 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x615 PUSH1 0x5C DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x663 PUSH1 0x7C DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB75 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6A6 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0xB8A SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x6B3 DUP8 DUP3 DUP5 PUSH2 0xC57 JUMP JUMPDEST ISZERO PUSH2 0x6D7 JUMPI PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP4 SUB SWAP6 POP PUSH2 0x48A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x48A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x772 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x747 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x772 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 0x755 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7C9 PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x817 PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x865 PUSH1 0x28 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8B3 PUSH1 0x48 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x901 PUSH1 0x5C DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x94F PUSH1 0x7C DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB75 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x99D PUSH1 0xBD DUP12 DUP12 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9E0 DUP12 DUP12 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0xB8A SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x9ED DUP9 DUP3 DUP6 PUSH2 0xC57 JUMP JUMPDEST PUSH2 0x9F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP7 LT ISZERO PUSH2 0xA13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ORIGIN PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA80 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 0xA96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xAA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAAE DUP6 DUP5 DUP10 PUSH2 0xC8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE ORIGIN PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP9 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB1E 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 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xB3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE POP PUSH1 0x1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST ADD PUSH1 0x14 ADD MLOAD SWAP1 JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xB83 DUP4 DUP4 PUSH1 0x41 PUSH2 0xCB9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9D DUP4 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB65 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBB2 DUP5 PUSH1 0x14 PUSH4 0xFFFFFFFF PUSH2 0xB65 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBC7 DUP6 PUSH1 0x28 PUSH4 0xFFFFFFFF PUSH2 0xB6D AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBDC DUP7 PUSH1 0x48 PUSH4 0xFFFFFFFF PUSH2 0xB65 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBF1 DUP8 PUSH1 0x5C PUSH4 0xFFFFFFFF PUSH2 0xB6D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP9 DUP10 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP8 DUP10 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE PUSH1 0x48 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP4 SWAP1 SWAP7 SHL SWAP1 SWAP4 AND PUSH1 0x68 DUP4 ADD MSTORE POP PUSH1 0x7C DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 MLOAD DUP1 DUP3 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0x9C ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC72 DUP3 PUSH2 0xC66 DUP6 PUSH2 0xD43 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xD94 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCB1 DUP3 PUSH2 0xCA5 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0xE65 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xE8C AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xCE7 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 JUMPDEST DUP5 DUP5 ADD DUP2 LT ISZERO PUSH2 0xD3A JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xD02 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP3 DUP7 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH2 0xD1B JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0xCEC JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x5C SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 MLOAD PUSH1 0x41 EQ PUSH2 0xDAF JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x48A JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH1 0x1B DUP2 LT ISZERO PUSH2 0xDD1 JUMPI PUSH1 0x1B ADD JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xDE9 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xDFA JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x48A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP5 AND DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP4 POP POP POP POP PUSH2 0x48A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xE74 JUMPI POP PUSH1 0x0 PUSH2 0x48A JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0xE81 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0xB83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0xE9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP2 PUSH2 0xEA5 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xad LOG0 GASLIMIT DUP4 PUSH6 0x836180123D7F PUSH10 0x7B236488FA45FDF2AF5A PUSH13 0xB672465401DDF4CA9964736F6C PUSH4 0x4300050B STOP ORIGIN ",
                "sourceMap": "336:3179:16:-;;;521:73;8:9:-1;5:2;;;30:1;27;20:12;5:2;521:73:16;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;521:73:16;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;521:73:16;;420:4:-1;411:14;;;;521:73:16;;;;;411:14:-1;521:73:16;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;521:73:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;521:73:16;;-1:-1:-1;;570:17:16;;;;-1:-1:-1;570:10:16;;:17;;;;;:::i;:::-;;521:73;336:3179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;336:3179:16;;;-1:-1:-1;336:3179:16;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
            },
            "deployedBytecode": {
                "linkReferences": {},
                "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a03e738146100515780635b2ac04a146100d55780637528de0d14610157578063d7d49123146101d4575b600080fd5b6100c16004803603602081101561006757600080fd5b81019060208101813564010000000081111561008257600080fd5b82018360208201111561009457600080fd5b803590602001918460018302840111640100000000831117156100b657600080fd5b509092509050610244565b604080519115158252519081900360200190f35b610145600480360360208110156100eb57600080fd5b81019060208101813564010000000081111561010657600080fd5b82018360208201111561011857600080fd5b8035906020019184600183028401116401000000008311171561013a57600080fd5b509092509050610490565b60408051918252519081900360200190f35b61015f6106e7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610199578181015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100c1600480360360208110156101ea57600080fd5b81019060208101813564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184600183028401116401000000008311171561023957600080fd5b50909250905061077c565b600080610291600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b905060006102df601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b9050600061032d602887878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b9050600061037b604888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b905060006103c9605c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b90506060610417607c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b75169050565b9050600061045a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8a92505050565b9050610467878284610c57565b8015610480575060008181526020819052604090205485115b9750505050505050505b92915050565b6000806104dd600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b9050600061052b601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610579602887878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b905060006105c7604888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610615605c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b90506060610663607c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b75169050565b905060006106a68a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8a92505050565b90506106b3878284610c57565b156106d757600090815260208190526040902054909303955061048a945050505050565b600097505050505050505061048a565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156107725780601f1061074757610100808354040283529160200191610772565b820191906000526020600020905b81548152906001019060200180831161075557829003601f168201915b5050505050905090565b6000806107c9600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610817601486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610865602887878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b905060006108b3604888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b65169050565b90506000610901605c89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b9050606061094f607c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b75169050565b9050600061099d60bd8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610b6d169050565b905060006109e08b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8a92505050565b90506109ed888285610c57565b6109f657600080fd5b6000818152602081905260409020548201861015610a1357600080fd5b604080516323b872dd60e01b81526001600160a01b038a81166004830152326024830152604482018590529151918916916323b872dd916064808201926020929091908290030181600087803b158015610a6c57600080fd5b505af1158015610a80573d6000803e3d6000fd5b505050506040513d6020811015610a9657600080fd5b5051610aa157600080fd5b6000610aae858489610c8f565b604080516323b872dd60e01b81523260048201526001600160a01b038c81166024830152604482018490529151929350908816916323b872dd916064808201926020929091908290030181600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050506040513d6020811015610b3457600080fd5b5051610b3f57600080fd5b600091825260208290526040909120805490910190555060019998505050505050505050565b016014015190565b016020015190565b6060610b8383836041610cb9565b9392505050565b600080610b9d838263ffffffff610b6516565b90506000610bb284601463ffffffff610b6516565b90506000610bc785602863ffffffff610b6d16565b90506000610bdc86604863ffffffff610b6516565b90506000610bf187605c63ffffffff610b6d16565b604080516bffffffffffffffffffffffff19606098891b811660208084019190915297891b8116603483015260488201969096529390961b909316606883015250607c8082019290925283518082039092018252609c0190925281519101209050919050565b6000610c7282610c6685610d43565b9063ffffffff610d9416565b6001600160a01b0316846001600160a01b03161490509392505050565b6000610cb182610ca5868663ffffffff610e6516565b9063ffffffff610e8c16565b949350505050565b606080826040519080825280601f01601f191660200182016040528015610ce7576020820181803883390190505b509050835b848401811015610d3a57858181518110610d0257fe5b602001015160f81c60f81b8286830381518110610d1b57fe5b60200101906001600160f81b031916908160001a905350600101610cec565b50949350505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000806000808451604114610daf576000935050505061048a565b50505060208201516040830151606084015160001a601b811015610dd157601b015b8060ff16601b14158015610de957508060ff16601c14155b15610dfa576000935050505061048a565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610e51573d6000803e3d6000fd5b50505060206040510351935050505061048a565b600082610e745750600061048a565b82820282848281610e8157fe5b0414610b8357600080fd5b6000808211610e9a57600080fd5b6000828481610ea557fe5b0494935050505056fea265627a7a72315820ada0458365836180123d7f697b236488fa45fdf2af5a6cb672465401ddf4ca9964736f6c634300050b0032",
                "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA03E738 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x5B2AC04A EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x7528DE0D EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xD7D49123 EQ PUSH2 0x1D4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x244 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15F PUSH2 0x6E7 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 0x199 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x181 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C6 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 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x77C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x291 PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2DF PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x32D PUSH1 0x28 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x37B PUSH1 0x48 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3C9 PUSH1 0x5C DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x417 PUSH1 0x7C DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB75 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x45A DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0xB8A SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x467 DUP8 DUP3 DUP5 PUSH2 0xC57 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x480 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 GT JUMPDEST SWAP8 POP POP POP POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4DD PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x52B PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x579 PUSH1 0x28 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5C7 PUSH1 0x48 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x615 PUSH1 0x5C DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x663 PUSH1 0x7C DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB75 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6A6 DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0xB8A SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x6B3 DUP8 DUP3 DUP5 PUSH2 0xC57 JUMP JUMPDEST ISZERO PUSH2 0x6D7 JUMPI PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP4 SUB SWAP6 POP PUSH2 0x48A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x48A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x772 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x747 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x772 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 0x755 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7C9 PUSH1 0x0 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x817 PUSH1 0x14 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x865 PUSH1 0x28 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8B3 PUSH1 0x48 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB65 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x901 PUSH1 0x5C DUP10 DUP10 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x94F PUSH1 0x7C DUP11 DUP11 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB75 AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x99D PUSH1 0xBD DUP12 DUP12 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH4 0xFFFFFFFF PUSH2 0xB6D AND SWAP1 POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9E0 DUP12 DUP12 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0xB8A SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x9ED DUP9 DUP3 DUP6 PUSH2 0xC57 JUMP JUMPDEST PUSH2 0x9F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP7 LT ISZERO PUSH2 0xA13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ORIGIN PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA80 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 0xA96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xAA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAAE DUP6 DUP5 DUP10 PUSH2 0xC8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE ORIGIN PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP9 AND SWAP2 PUSH4 0x23B872DD SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB1E 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 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xB3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE POP PUSH1 0x1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST ADD PUSH1 0x14 ADD MLOAD SWAP1 JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xB83 DUP4 DUP4 PUSH1 0x41 PUSH2 0xCB9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9D DUP4 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB65 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBB2 DUP5 PUSH1 0x14 PUSH4 0xFFFFFFFF PUSH2 0xB65 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBC7 DUP6 PUSH1 0x28 PUSH4 0xFFFFFFFF PUSH2 0xB6D AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBDC DUP7 PUSH1 0x48 PUSH4 0xFFFFFFFF PUSH2 0xB65 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBF1 DUP8 PUSH1 0x5C PUSH4 0xFFFFFFFF PUSH2 0xB6D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP9 DUP10 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP8 DUP10 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE PUSH1 0x48 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP4 SWAP1 SWAP7 SHL SWAP1 SWAP4 AND PUSH1 0x68 DUP4 ADD MSTORE POP PUSH1 0x7C DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 MLOAD DUP1 DUP3 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0x9C ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC72 DUP3 PUSH2 0xC66 DUP6 PUSH2 0xD43 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xD94 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCB1 DUP3 PUSH2 0xCA5 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0xE65 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xE8C AND JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xCE7 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 JUMPDEST DUP5 DUP5 ADD DUP2 LT ISZERO PUSH2 0xD3A JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xD02 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP3 DUP7 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH2 0xD1B JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0xCEC JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x5C SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 MLOAD PUSH1 0x41 EQ PUSH2 0xDAF JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x48A JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH1 0x1B DUP2 LT ISZERO PUSH2 0xDD1 JUMPI PUSH1 0x1B ADD JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0xDE9 JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0xDFA JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x48A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP5 AND DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD SWAP4 POP POP POP POP PUSH2 0x48A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xE74 JUMPI POP PUSH1 0x0 PUSH2 0x48A JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0xE81 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0xB83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0xE9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP2 PUSH2 0xEA5 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xad LOG0 GASLIMIT DUP4 PUSH6 0x836180123D7F PUSH10 0x7B236488FA45FDF2AF5A PUSH13 0xB672465401DDF4CA9964736F6C PUSH4 0x4300050B STOP ORIGIN ",
                "sourceMap": "336:3179:16:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;336:3179:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:534;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;699:534:16;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;699:534:16;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;699:534:16;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;699:534:16;;-1:-1:-1;699:534:16;-1:-1:-1;699:534:16;:::i;:::-;;;;;;;;;;;;;;;;;;1239:609;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1239:609:16;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1239:609:16;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1239:609:16;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1239:609:16;;-1:-1:-1;1239:609:16;-1:-1:-1;1239:609:16;:::i;:::-;;;;;;;;;;;;;;;;600:93;;;:::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;600:93:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1854:1056;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1854:1056:16;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1854:1056:16;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1854:1056:16;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1854:1056:16;;-1:-1:-1;1854:1056:16;-1:-1:-1;1854:1056:16;:::i;699:534::-;760:4;776:14;793:18;809:1;793:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;793:15:16;;:18;-1:-1:-1;;793:18:16;:15;:18;;-1:-1:-1;793:18:16:i;:::-;776:35;;821:19;843;859:2;843:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;843:15:16;;:19;-1:-1:-1;;843:19:16;:15;:19;;-1:-1:-1;843:19:16:i;:::-;821:41;;872:21;896:16;909:2;896:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;896:12:16;;:16;-1:-1:-1;;896:16:16;:12;:16;;-1:-1:-1;896:16:16:i;:::-;872:40;;922:18;943:19;959:2;943:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;943:15:16;;:19;-1:-1:-1;;943:19:16;:15;:19;;-1:-1:-1;943:19:16:i;:::-;922:40;;972:20;995:16;1008:2;995:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;995:12:16;;:16;-1:-1:-1;;995:16:16;:12;:16;;-1:-1:-1;995:16:16:i;:::-;972:39;;1021:22;1046;1064:3;1046:4;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1046:17:16;;:22;-1:-1:-1;;1046:22:16;:17;:22;;-1:-1:-1;1046:22:16:i;:::-;1021:47;;1078:12;1093:18;1106:4;;1093:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1093:12:16;;-1:-1:-1;;;1093:18:16:i;:::-;1078:33;;1129:62;1167:6;1175:4;1181:9;1129:37;:62::i;:::-;:97;;;;-1:-1:-1;1195:6:16;:12;;;;;;;;;;;:31;-1:-1:-1;1129:97:16;1122:104;;;;;;;;;699:534;;;;;:::o;1239:609::-;1308:4;1324:14;1341:18;1357:1;1341:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1341:15:16;;:18;-1:-1:-1;;1341:18:16;:15;:18;;-1:-1:-1;1341:18:16:i;:::-;1324:35;;1369:19;1391;1407:2;1391:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1391:15:16;;:19;-1:-1:-1;;1391:19:16;:15;:19;;-1:-1:-1;1391:19:16:i;:::-;1369:41;;1420:21;1444:16;1457:2;1444:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1444:12:16;;:16;-1:-1:-1;;1444:16:16;:12;:16;;-1:-1:-1;1444:16:16:i;:::-;1420:40;;1470:18;1491:19;1507:2;1491:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1491:15:16;;:19;-1:-1:-1;;1491:19:16;:15;:19;;-1:-1:-1;1491:19:16:i;:::-;1470:40;;1520:20;1543:16;1556:2;1543:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1543:12:16;;:16;-1:-1:-1;;1543:16:16;:12;:16;;-1:-1:-1;1543:16:16:i;:::-;1520:39;;1569:22;1594;1612:3;1594:4;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1594:17:16;;:22;-1:-1:-1;;1594:22:16;:17;:22;;-1:-1:-1;1594:22:16:i;:::-;1569:47;;1626:12;1641:18;1654:4;;1641:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1641:12:16;;-1:-1:-1;;;1641:18:16:i;:::-;1626:33;;1674:62;1712:6;1720:4;1726:9;1674:37;:62::i;:::-;1670:171;;;1779:6;:12;;;;;;;;;;;1760:31;;;;-1:-1:-1;1752:39:16;;-1:-1:-1;;;;;1752:39:16;1670:171;1829:1;1822:8;;;;;;;;;;;600:93;676:10;669:17;;;;;;;;-1:-1:-1;;669:17:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:13;;669:17;;676:10;;669:17;;676:10;669:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;600:93;:::o;1854:1056::-;1914:4;1930:14;1947:18;1963:1;1947:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1947:15:16;;:18;-1:-1:-1;;1947:18:16;:15;:18;;-1:-1:-1;1947:18:16:i;:::-;1930:35;;1975:19;1997;2013:2;1997:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1997:15:16;;:19;-1:-1:-1;;1997:19:16;:15;:19;;-1:-1:-1;1997:19:16:i;:::-;1975:41;;2026:21;2050:16;2063:2;2050:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2050:12:16;;:16;-1:-1:-1;;2050:16:16;:12;:16;;-1:-1:-1;2050:16:16:i;:::-;2026:40;;2076:18;2097:19;2113:2;2097:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2097:15:16;;:19;-1:-1:-1;;2097:19:16;:15;:19;;-1:-1:-1;2097:19:16:i;:::-;2076:40;;2126:20;2149:16;2162:2;2149:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2149:12:16;;:16;-1:-1:-1;;2149:16:16;:12;:16;;-1:-1:-1;2149:16:16:i;:::-;2126:39;;2175:22;2200;2218:3;2200:4;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2200:17:16;;:22;-1:-1:-1;;2200:22:16;:17;:22;;-1:-1:-1;2200:22:16:i;:::-;2175:47;;2232:17;2252;2265:3;2252:4;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2252:12:16;;:17;-1:-1:-1;;2252:17:16;:12;:17;;-1:-1:-1;2252:17:16:i;:::-;2232:37;;2280:12;2295:18;2308:4;;2295:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2295:12:16;;-1:-1:-1;;;2295:18:16:i;:::-;2280:33;;2365:62;2403:6;2411:4;2417:9;2365:37;:62::i;:::-;2357:71;;;;;;2446:6;:12;;;;;;;;;;;:27;;:47;-1:-1:-1;2446:47:16;2438:56;;;;;;2548:64;;;-1:-1:-1;;;2548:64:16;;-1:-1:-1;;;;;2548:64:16;;;;;;;2588:9;2548:64;;;;;;;;;;;;:31;;;;;;:64;;;;;;;;;;;;;;;-1:-1:-1;2548:31:16;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;2548:64:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2548:64:16;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2548:64:16;2540:73;;;;;;2658:21;2682:57;2691:15;2708:12;2722:16;2682:8;:57::i;:::-;2757:67;;;-1:-1:-1;;;2757:67:16;;2788:9;2757:67;;;;-1:-1:-1;;;;;2757:67:16;;;;;;;;;;;;;;;2658:81;;-1:-1:-1;2757:30:16;;;;;;:67;;;;;;;;;;;;;;;-1:-1:-1;2757:30:16;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;2757:67:16;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2757:67:16;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2757:67:16;2749:76;;;;;;2850:6;:12;;;;;;;;;;;;;:31;;;2835:46;;-1:-1:-1;;;1854:1056:16;-1:-1:-1;;;;;;;;;1854:1056:16:o;52:171:18:-;185:16;203:2;181:25;175:32;;156:61::o;229:167::-;358:16;376:2;354:25;348:32;;328:62::o;859:139::-;935:12;966:25;975:4;981:5;988:2;966:8;:25::i;:::-;959:32;859:139;-1:-1:-1;;;859:139:18:o;2916:437:16:-;2980:7;;3016:18;:4;2980:7;3016:18;:15;:18;:::i;:::-;2999:35;-1:-1:-1;3044:19:16;3066;:4;3082:2;3066:19;:15;:19;:::i;:::-;3044:41;-1:-1:-1;3095:21:16;3119:16;:4;3132:2;3119:16;:12;:16;:::i;:::-;3095:40;-1:-1:-1;3145:18:16;3166:19;:4;3182:2;3166:19;:15;:19;:::i;:::-;3145:40;-1:-1:-1;3195:20:16;3218:16;:4;3231:2;3218:16;:12;:16;:::i;:::-;3261:84;;;-1:-1:-1;;3261:84:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3261:84:16;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3261:84:16;;;;;3251:95;;;;;;-1:-1:-1;2916:437:16;;;:::o;577:194:19:-;684:4;713:53;756:9;713:34;:9;:32;:34::i;:::-;:42;:53;:42;:53;:::i;:::-;-1:-1:-1;;;;;703:63:19;:6;-1:-1:-1;;;;;703:63:19;;696:70;;577:194;;;;;:::o;3359:154:16:-;3446:4;3469:37;3494:11;3469:20;:5;3479:9;3469:20;:9;:20;:::i;:::-;:24;:37;:24;:37;:::i;:::-;3462:44;3359:154;-1:-1:-1;;;;3359:154:16:o;571:282:18:-;656:12;680:19;712:6;702:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;702:17:18;87:34:-1;135:17;;-1:-1;702:17:18;-1:-1:-1;680:39:18;-1:-1:-1;742:5:18;729:95;762:5;753:6;:14;749:1;:18;729:95;;;806:4;811:1;806:7;;;;;;;;;;;;;;;;788:6;797:5;795:1;:7;788:15;;;;;;;;;;;:25;-1:-1:-1;;;;;788:25:18;;;;;;;;-1:-1:-1;769:3:18;;729:95;;;-1:-1:-1;840:6:18;571:282;-1:-1:-1;;;;571:282:18:o;1785:265:11:-;1984:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1984:58:11;;;;;;;1974:69;;;;;;1785:265::o;609:1026::-;687:7;706:9;725;744:7;804:9;:16;824:2;804:22;800:72;;858:1;842:19;;;;;;;800:72;-1:-1:-1;;;1166:4:11;1151:20;;1145:27;1211:4;1196:20;;1190:27;1264:4;1249:20;;1243:27;1240:1;1235:36;1390:2;1386:6;;1382:44;;;1413:2;1408:7;1382:44;1503:1;:7;;1508:2;1503:7;;:18;;;;;1514:1;:7;;1519:2;1514:7;;1503:18;1499:130;;;1553:1;1537:19;;;;;;;1499:130;1594:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1594:24:11;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1594:24:11;;;;;;;;1587:31;;;;;;;229:421:12;287:7;527:6;523:45;;-1:-1:-1;556:1:12;549:8;;523:45;590:5;;;594:1;590;:5;:1;613:5;;;;;:10;605:19;;;;;778:296;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:12:o"
            }
        }
    },
    "sources": {
        "test/BasicTradeSubContract.sol": {
            "id": 16
        },
        "@kosu/subcontract-sdk/contracts/SubContract.sol": {
            "id": 20
        },
        "@kosu/subcontract-sdk/contracts/BytesDecoder.sol": {
            "id": 18
        },
        "@kosu/subcontract-sdk/contracts/SignatureVerification.sol": {
            "id": 19
        },
        "openzeppelin-solidity/contracts/cryptography/ECDSA.sol": {
            "id": 11
        },
        "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol": {
            "id": 13
        },
        "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": {
            "id": 14
        },
        "openzeppelin-solidity/contracts/math/SafeMath.sol": {
            "id": 12
        }
    },
    "sourceCodes": {
        "test/BasicTradeSubContract.sol": "pragma solidity ^0.5.0;\n\nimport \"@kosu/subcontract-sdk/contracts/SubContract.sol\";\nimport \"@kosu/subcontract-sdk/contracts/BytesDecoder.sol\";\nimport \"@kosu/subcontract-sdk/contracts/SignatureVerification.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n\ncontract BasicTradeSubContract is SubContract {\n    using BytesDecoder for bytes;\n    using SafeMath for uint;\n\n    mapping(bytes32 => uint) bought;\n    string private _arguments;\n\n    constructor(string memory args) public {\n        _arguments = args;\n    }\n\n    function arguments() external view returns (string memory) {\n        return _arguments;\n    }\n\n    function isValid(bytes calldata data) external view returns (bool) {\n        address signer = data.getAddress(0);\n        address signerToken = data.getAddress(20);\n        uint signerTokenCount = data.getUint(40);\n        address buyerToken = data.getAddress(72);\n        uint buyerTokenCount = data.getUint(92);\n        bytes memory signature = data.getSignature(124);\n        bytes32 hash = getOrderHash(data);\n\n        return SignatureVerification.verifySignature(signer, hash, signature) && bought[hash] < signerTokenCount;\n    }\n\n    function amountRemaining(bytes calldata data) external view returns (uint) {\n        address signer = data.getAddress(0);\n        address signerToken = data.getAddress(20);\n        uint signerTokenCount = data.getUint(40);\n        address buyerToken = data.getAddress(72);\n        uint buyerTokenCount = data.getUint(92);\n        bytes memory signature = data.getSignature(124);\n        bytes32 hash = getOrderHash(data);\n\n        if (SignatureVerification.verifySignature(signer, hash, signature)) {\n            return  signerTokenCount - bought[hash];\n        } else {\n            return 0;\n        }\n\n    }\n\n    function participate(bytes calldata data) external returns (bool) {\n        address signer = data.getAddress(0);\n        address signerToken = data.getAddress(20);\n        uint signerTokenCount = data.getUint(40);\n        address buyerToken = data.getAddress(72);\n        uint buyerTokenCount = data.getUint(92);\n        bytes memory signature = data.getSignature(124);\n        uint tokensToTake = data.getUint(189);\n\n        bytes32 hash = getOrderHash(data);\n//         1. Standard validation\n        require(SignatureVerification.verifySignature(signer, hash, signature));\n        require(bought[hash] + tokensToTake <= signerTokenCount);\n\n        // transfer maker -> taker\n        require(ERC20(signerToken).transferFrom(signer, tx.origin, tokensToTake));\n        // transfer taker -> maker\n        uint tokensTakerCount = ratioFor(buyerTokenCount, tokensToTake, signerTokenCount);\n        require(ERC20(buyerToken).transferFrom(tx.origin, signer, tokensTakerCount));\n        bought[hash] = bought[hash] + tokensTakerCount;\n\n        return true;\n    }\n\n    function getOrderHash(bytes memory data) internal view returns (bytes32) {\n        address signer = data.getAddress(0);\n        address signerToken = data.getAddress(20);\n        uint signerTokenCount = data.getUint(40);\n        address buyerToken = data.getAddress(72);\n        uint buyerTokenCount = data.getUint(92);\n        return keccak256(abi.encodePacked(signer, signerToken, signerTokenCount, buyerToken, buyerTokenCount));\n    }\n\n    function ratioFor(uint value, uint numerator, uint denominator) internal pure returns (uint) {\n        return value.mul(numerator).div(denominator);\n    }\n}",
        "@kosu/subcontract-sdk/contracts/SubContract.sol": "pragma solidity ^0.5.0;\n\n/** @title SubContract\n    @author Freydal\n*/\ninterface SubContract {\n\n    /** @dev Defines interface for reporting argument json.\n        @notice Defines interface for reporting argument json.\n        @return JSON string representing arguments.\n    */\n    function arguments() external view returns (string memory);\n\n    /** @dev Defines interface for Kosu Order validation.\n        @notice Defines interface for Kosu Order validation.\n        @param data Kosu Order serialized based on arguments.\n        @return boolean representing validity of order\n    */\n    function isValid(bytes calldata data) external view returns (bool);\n\n    /** @dev Defines interface for determining remaining amount available in Kosu order\n        @notice Defines interface for determining remaining amount available in Kosu order\n        @param data Kosu Order serialized based on arguments.\n        @return Number of asset available to be taken\n    */\n    function amountRemaining(bytes calldata data) external view returns (uint);\n\n    /** @dev Defines interface to settlement of Kosu order\n        @notice Defines interface to settlement of Kosu order\n        @param data Kosu Order serialized based on arguments.\n        @return Number of asset successfully taken\n    */\n    function participate(bytes calldata data) external returns (bool);\n}\n",
        "@kosu/subcontract-sdk/contracts/BytesDecoder.sol": "pragma solidity ^0.5.0;\n\nlibrary BytesDecoder {\n    function getAddress(bytes memory this, uint index) internal pure returns (address a) {\n        assembly {\n            a := mload(add(add(this, index), 20))\n        }\n    }\n\n    function getUint(bytes memory this, uint index) internal pure returns (uint ui) {\n        assembly {\n            ui := mload(add(add(this, index), 32))\n        }\n    }\n\n    function getInt(bytes memory this, uint index) internal pure returns (int i) {\n        assembly {\n            i := mload(add(add(this, index), 32))\n        }\n    }\n\n    function getBytes(bytes memory this, uint start, uint length) internal pure returns (bytes memory) {\n        bytes memory result = new bytes(length);\n        for(uint i = start; i < length + start; i++) {\n            result[i-start] = this[i];\n        }\n        return result;\n    }\n\n    function getSignature(bytes memory this, uint start) internal pure returns (bytes memory) {\n        return getBytes(this, start, 65);\n    }\n}",
        "@kosu/subcontract-sdk/contracts/SignatureVerification.sol": "pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"./BytesDecoder.sol\";\n\n/** @title SignatureVerification\n*/\nlibrary SignatureVerification {\n  using ECDSA for bytes32;\n  using BytesDecoder for bytes;\n\n  /** @dev Recovers the hash with the v, r and s.  And compares to the signer.\n      @notice Recovers the hash with the v, r and s.  And compares to the signer.\n      @param signer Signer address\n      @param orderHash Hashed Kosu order\n      @param signature The signature\n      @return Validity of the signature boolean\n  */\n  function verifySignature(address signer, bytes32 orderHash, bytes memory signature) pure internal returns (bool) {\n    return signer == orderHash.toEthSignedMessageHash().recover(signature);\n  }\n\n}\n",
        "openzeppelin-solidity/contracts/cryptography/ECDSA.sol": "pragma solidity ^0.5.0;\n\n/**\n * @title Elliptic curve signature operations\n * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d\n * TODO Remove this library once solidity supports passing a signature to ecrecover.\n * See https://github.com/ethereum/solidity/issues/864\n */\n\nlibrary ECDSA {\n    /**\n     * @dev Recover signer address from a message by using their signature\n     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.\n     * @param signature bytes signature, the signature is generated using web3.eth.sign()\n     */\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n\n        // Check the signature length\n        if (signature.length != 65) {\n            return (address(0));\n        }\n\n        // Divide the signature in r, s and v variables\n        // ecrecover takes the signature parameters, and the only way to get them\n        // currently is to use assembly.\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            r := mload(add(signature, 0x20))\n            s := mload(add(signature, 0x40))\n            v := byte(0, mload(add(signature, 0x60)))\n        }\n\n        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions\n        if (v < 27) {\n            v += 27;\n        }\n\n        // If the version is correct return the signer address\n        if (v != 27 && v != 28) {\n            return (address(0));\n        } else {\n            return ecrecover(hash, v, r, s);\n        }\n    }\n\n    /**\n     * toEthSignedMessageHash\n     * @dev prefix a bytes32 value with \"\\x19Ethereum Signed Message:\"\n     * and hash the result\n     */\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n    }\n}\n",
        "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol": "pragma solidity ^0.5.0;\n\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\n\n/**\n * @title Standard ERC20 token\n *\n * @dev Implementation of the basic standard token.\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\n * Originally based on code by FirstBlood:\n * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\n *\n * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for\n * all accounts just by listening to said events. Note that this isn't required by the specification, and other\n * compliant implementations may not do it.\n */\ncontract ERC20 is IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowed;\n\n    uint256 private _totalSupply;\n\n    /**\n    * @dev Total number of tokens in existence\n    */\n    function totalSupply() public view returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n    * @dev Gets the balance of the specified address.\n    * @param owner The address to query the balance of.\n    * @return An uint256 representing the amount owned by the passed address.\n    */\n    function balanceOf(address owner) public view returns (uint256) {\n        return _balances[owner];\n    }\n\n    /**\n     * @dev Function to check the amount of tokens that an owner allowed to a spender.\n     * @param owner address The address which owns the funds.\n     * @param spender address The address which will spend the funds.\n     * @return A uint256 specifying the amount of tokens still available for the spender.\n     */\n    function allowance(address owner, address spender) public view returns (uint256) {\n        return _allowed[owner][spender];\n    }\n\n    /**\n    * @dev Transfer token for a specified address\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function transfer(address to, uint256 value) public returns (bool) {\n        _transfer(msg.sender, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n     * Beware that changing an allowance with this method brings the risk that someone may use both the old\n     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     */\n    function approve(address spender, uint256 value) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = value;\n        emit Approval(msg.sender, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev Transfer tokens from one address to another.\n     * Note that while this function emits an Approval event, this is not required as per the specification,\n     * and other compliant implementations may not emit the event.\n     * @param from address The address which you want to send tokens from\n     * @param to address The address which you want to transfer to\n     * @param value uint256 the amount of tokens to be transferred\n     */\n    function transferFrom(address from, address to, uint256 value) public returns (bool) {\n        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);\n        _transfer(from, to, value);\n        emit Approval(from, msg.sender, _allowed[from][msg.sender]);\n        return true;\n    }\n\n    /**\n     * @dev Increase the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To increment\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * Emits an Approval event.\n     * @param spender The address which will spend the funds.\n     * @param addedValue The amount of tokens to increase the allowance by.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n     * @dev Decrease the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To decrement\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * Emits an Approval event.\n     * @param spender The address which will spend the funds.\n     * @param subtractedValue The amount of tokens to decrease the allowance by.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n    * @dev Transfer token for a specified addresses\n    * @param from The address to transfer from.\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function _transfer(address from, address to, uint256 value) internal {\n        require(to != address(0));\n\n        _balances[from] = _balances[from].sub(value);\n        _balances[to] = _balances[to].add(value);\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Internal function that mints an amount of the token and assigns it to\n     * an account. This encapsulates the modification of balances such that the\n     * proper events are emitted.\n     * @param account The account that will receive the created tokens.\n     * @param value The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.add(value);\n        _balances[account] = _balances[account].add(value);\n        emit Transfer(address(0), account, value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account.\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.sub(value);\n        _balances[account] = _balances[account].sub(value);\n        emit Transfer(account, address(0), value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account, deducting from the sender's allowance for said account. Uses the\n     * internal burn function.\n     * Emits an Approval event (reflecting the reduced allowance).\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burnFrom(address account, uint256 value) internal {\n        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);\n        _burn(account, value);\n        emit Approval(account, msg.sender, _allowed[account][msg.sender]);\n    }\n}\n",
        "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": "pragma solidity ^0.5.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n    function transfer(address to, uint256 value) external returns (bool);\n\n    function approve(address spender, uint256 value) external returns (bool);\n\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n    function totalSupply() external view returns (uint256);\n\n    function balanceOf(address who) external view returns (uint256);\n\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n",
        "openzeppelin-solidity/contracts/math/SafeMath.sol": "pragma solidity ^0.5.0;\n\n/**\n * @title SafeMath\n * @dev Unsigned math operations with safety checks that revert on error\n */\nlibrary SafeMath {\n    /**\n    * @dev Multiplies two unsigned integers, reverts on overflow.\n    */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b);\n\n        return c;\n    }\n\n    /**\n    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.\n    */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Solidity only automatically asserts when dividing by 0\n        require(b > 0);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n    */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b <= a);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n    * @dev Adds two unsigned integers, reverts on overflow.\n    */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a);\n\n        return c;\n    }\n\n    /**\n    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n    * reverts when dividing by zero.\n    */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b != 0);\n        return a % b;\n    }\n}\n"
    },
    "sourceTreeHashHex": "0x03f00360d6ccc36255e2b60b8476988fe021e5e6b189e7f4c9ce1e72bc175cd1",
    "compiler": {
        "name": "solc",
        "version": "soljson-v0.5.11+commit.c082d0b4.js",
        "settings": {
            "optimizer": {
                "enabled": true,
                "runs": 200,
                "details": {
                    "yul": true,
                    "deduplicate": true,
                    "cse": true,
                    "constantOptimizer": true
                }
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "devdoc",
                        "evm.bytecode.object",
                        "evm.bytecode.sourceMap",
                        "evm.deployedBytecode.object",
                        "evm.deployedBytecode.sourceMap"
                    ]
                }
            },
            "evmVersion": "constantinople",
            "remappings": [
                "@kosu/subcontract-sdk=/Users/hen/GitHub/km/packages/kosu-system-contracts/node_modules/@kosu/subcontract-sdk",
                "openzeppelin-solidity=/Users/hen/GitHub/km/node_modules/openzeppelin-solidity",
                "@0x/contracts-exchange=/Users/hen/GitHub/km/node_modules/@0x/contracts-exchange",
                "@0x/contracts-exchange-libs=/Users/hen/GitHub/km/node_modules/@0x/contracts-exchange-libs",
                "@0x/contracts-utils=/Users/hen/GitHub/km/node_modules/@0x/contracts-utils"
            ]
        }
    },
    "networks": {}
}
