[ { "inputs": [ { "internalType": "address", "name": "moonThatUniswapV3Utility_", "type": "address" }, { "internalType": "uint256", "name": "limitProtectionDuration_", "type": "uint256" }, { "internalType": "uint256", "name": "maxTokensPerWalletBasisPoints_", "type": "uint256" }, { "internalType": "uint256", "name": "maxTokensPerTransactionBasisPoints_", "type": "uint256" }, { "internalType": "uint256", "name": "maxAllowedBuysPerOriginPerBlock_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BPOverflow", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [], "name": "FallbackNotAllowed", "type": "error" }, { "inputs": [], "name": "InitialLiquidityAlreadyAdded", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MaxBuysPerBlockPerOriginExceeded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "maxTokensPerTransaction", "type": "uint256" } ], "name": "MaxTokensPerTransactionExceeded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "maxTokensPerWallet", "type": "uint256" } ], "name": "MaxTokensPerWalletExceeded", "type": "error" }, { "inputs": [], "name": "NoBuysInFirstBlock", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReceiveNotAllowed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "liquidityOwner_", "type": "address" }, { "internalType": "address", "name": "defaultFeeRecipient_", "type": "address" }, { "components": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "internalType": "struct IMoonThatUniswapV3Utility.UniswapV3LiquidityRange[]", "name": "initialLiquidityRanges_", "type": "tuple[]" } ], "name": "addAndLockLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundedBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundedDate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialLiquidityAdded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint160", "name": "initialSqrtPriceX96_", "type": "uint160" }, { "internalType": "bool", "name": "isCommunityLaunch_", "type": "bool" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isCommunityLaunch", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "address_", "type": "address" } ], "name": "isLiquidityPool", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "address_", "type": "address" } ], "name": "isUnlimited", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitsEnforced", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokensPerTransaction", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokensPerWallet", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "moonThatUniswapV3Utility", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenIsToken0", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
61016060405234801561001157600080fd5b5060405161353e38038061353e83398101604081905261003091610185565b6100386100d3565b6001600160a01b03851660c0526100516012600a6102d9565b61005f90633b9aca006102ef565b60a0526001608052612710831115610092576040516326fa927160e21b8152600481018490526024015b60405180910390fd5b6127108211156100b8576040516326fa927160e21b815260048101839052602401610089565b60e09390935261014092909252610100526101205250610306565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101235760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101825780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b600080600080600060a0868803121561019d57600080fd5b85516001600160a01b03811681146101b457600080fd5b602087015160408801516060890151608090990151929a91995097965090945092505050565b634e487b7160e01b600052601160045260246000fd5b6001815b600184111561022b5780850481111561020f5761020f6101da565b600184161561021d57908102905b60019390931c9280026101f4565b935093915050565b600082610242575060016102d3565b8161024f575060006102d3565b8160018114610265576002811461026f5761028b565b60019150506102d3565b60ff841115610280576102806101da565b50506001821b6102d3565b5060208310610133831016604e8410600b84101617156102ae575081810a6102d3565b6102bb60001984846101f0565b80600019048211156102cf576102cf6101da565b0290505b92915050565b60006102e860ff841683610233565b9392505050565b80820281158282048414176102d3576102d36101da565b60805160a05160c05160e0516101005161012051610140516131ad61039160003960006122c901526000610f9901526000610ae701526000610aa101526000818161068a015281816109a201528181610cc9015281816110950152818161120601526116360152600081816105f20152610928015260008181611830015261187b01526131ad6000f3fe6080604052600436106101dc5760003560e01c806373bd699a11610102578063b273b3b911610095578063e70f5f4111610064578063e70f5f411461067b578063e85455d7146106ae578063f2fde38b146106e7578063f85aff941461070757610213565b8063b273b3b9146105a3578063d505accf146105c3578063d5abeb01146105e3578063dd62ed3e1461061657610213565b80638da5cb5b116100d15780638da5cb5b146104e457806395d89b4114610535578063a35b4cef1461054a578063a9059cbb1461058357610213565b806373bd699a146104705780637ecebe001461048757806384b0196e146104a7578063856bfdb8146104cf57610213565b806329c6b3481161017a57806360f47d5f1161014957806360f47d5f1461040b578063687716181461042157806370a082311461043b578063715018a61461045b57610213565b806329c6b348146103b0578063313ce567146103c55780633644e515146103e1578063469132ce146103f657610213565b806311b083d9116101b657806311b083d9146102c4578063150b7a02146102e657806318160ddd1461035c57806323b872dd1461039057610213565b806306fdde0314610245578063095ea7b31461027057806310b828c9146102a057610213565b36610213576040517fcb263c3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fdeab4c3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34801561025157600080fd5b5061025a61071c565b60405161026791906126ea565b60405180910390f35b34801561027c57600080fd5b5061029061028b366004612719565b6107d7565b6040519015158152602001610267565b3480156102ac57600080fd5b506102b660035481565b604051908152602001610267565b3480156102d057600080fd5b506102e46102df366004612825565b6107f1565b005b3480156102f257600080fd5b5061032b6103013660046128cd565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610267565b34801561036857600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546102b6565b34801561039c57600080fd5b506102906103ab36600461296e565b610a67565b3480156103bc57600080fd5b50610290610a8b565b3480156103d157600080fd5b5060405160128152602001610267565b3480156103ed57600080fd5b506102b6610ad6565b34801561040257600080fd5b506102b6610ae0565b34801561041757600080fd5b506102b660045481565b34801561042d57600080fd5b506005546102909060ff1681565b34801561044757600080fd5b506102b66104563660046129af565b610b42565b34801561046757600080fd5b506102e4610b87565b34801561047c57600080fd5b506003541515610290565b34801561049357600080fd5b506102b66104a23660046129af565b610b9b565b3480156104b357600080fd5b506104bc610ba6565b60405161026797969594939291906129cc565b3480156104db57600080fd5b50610290610ca7565b3480156104f057600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610267565b34801561054157600080fd5b5061025a610d45565b34801561055657600080fd5b506102906105653660046129af565b6001600160a01b031660009081526002602052604090205460ff1690565b34801561058f57600080fd5b5061029061059e366004612719565b610d96565b3480156105af57600080fd5b506102e46105be366004612abb565b610da4565b3480156105cf57600080fd5b506102e46105de366004612bbf565b610dbc565b3480156105ef57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102b6565b34801561062257600080fd5b506102b6610631366004612c36565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561068757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061051d565b3480156106ba57600080fd5b506102906106c93660046129af565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156106f357600080fd5b506102e46107023660046129af565b610f3b565b34801561071357600080fd5b506102b6610f92565b606060007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b905080600301805461075390612c6f565b80601f016020809104026020016040519081016040528092919081815260200182805461077f90612c6f565b80156107cc5780601f106107a1576101008083540402835291602001916107cc565b820191906000526020600020905b8154815290600101906020018083116107af57829003601f168201915b505050505091505090565b6000336107e5818585610fe0565b60019150505b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561083c5750825b905060008267ffffffffffffffff1660011480156108595750303b155b905081158015610867575080155b1561089e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156108d257845468ff00000000000000001916680100000000000000001785555b6108db8a610fed565b6108e58989610ffe565b6108ee89611014565b6005805460ff191687151590811790915560ff161561092257336000908152600260205260409020805460ff191660011790555b61094c307f000000000000000000000000000000000000000000000000000000000000000061105b565b610954611091565b61095c611202565b6040517f882fed6700000000000000000000000000000000000000000000000000000000815230600482015261271060248201526001600160a01b0388811660448301527f0000000000000000000000000000000000000000000000000000000000000000169063882fed67906064016020604051808303816000875af11580156109eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0f9190612ca9565b508315610a5b57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b600033610a75858285611359565b610a8085858561140f565b506001949350505050565b6000610a98600354151590565b8015610ad157507f0000000000000000000000000000000000000000000000000000000000000000600354610acd9190612cdc565b4211155b905090565b6000610ad1611487565b60006127107f0000000000000000000000000000000000000000000000000000000000000000610b2e7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b610b389190612cef565b610ad19190612d06565b6000807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b6001600160a01b0390931660009081526020939093525050604090205490565b610b8f611491565b610b996000611505565b565b60006107eb8261158e565b600060608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008054909150158015610be557506001810154155b610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a6564000000000000000000000060448201526064015b60405180910390fd5b610c586115b7565b610c60611608565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b60405163016c19bb60e01b815230600482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063016c19bb906024016040805180830381865afa158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d339190612d28565b506001600160a01b0316301492915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161075390612c6f565b6000336107e581858561140f565b610dac611491565b610db7838383611632565b505050565b83421115610df9576040517f6279130200000000000000000000000000000000000000000000000000000000815260048101859052602401610c47565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e658c6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ec082611ce5565b90506000610ed082878787611d2d565b9050896001600160a01b0316816001600160a01b031614610f30576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528b166024820152604401610c47565b610a5b8a8a8a610fe0565b610f43611491565b6001600160a01b038116610f86576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610c47565b610f8f81611505565b50565b60006127107f0000000000000000000000000000000000000000000000000000000000000000610b2e7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b610db78383836001611d5b565b610ff5611e87565b610f8f81611eee565b611006611e87565b6110108282611ef6565b5050565b61101c611e87565b610f8f816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611f59565b6001600160a01b0382166110855760405163ec442f0560e01b815260006004820152602401610c47565b61101060008383611fcc565b60007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b031663c5612bb76040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111e9190810190612d57565b905060005b8151811015610db7576001806000856001600160a01b0316638d896bcf3087878151811061115357611153612dfe565b60200260200101516040518363ffffffff1660e01b81526004016111919291906001600160a01b0392909216825262ffffff16602082015260400190565b602060405180830381865afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d29190612ca9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611123565b60007f00000000000000000000000000000000000000000000000000000000000000009050600160026000836001600160a01b031663770bc10a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190612ca9565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160026000836001600160a01b03166321eb3dd76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190612ca9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905550565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461140957818110156113fa576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610c47565b61140984848484036000611d5b565b50505050565b6001600160a01b038316611452576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610c47565b6001600160a01b03821661147c5760405163ec442f0560e01b815260006004820152602401610c47565b610db7838383611fcc565b6000610ad1612002565b336114c37f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b99576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c47565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610b67565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1009161075390612c6f565b606060007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100610742565b60007f000000000000000000000000000000000000000000000000000000000000000090506116c530826001600160a01b03166321eb3dd76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bd9190612ca9565b600019610fe0565b60405163016c19bb60e01b815230600482015260009081906001600160a01b0384169063016c19bb906024016040805180830381865afa15801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190612d28565b9150915060005b8451811015611cd45760008061174c610ca7565b61177557600087848151811061176457611764612dfe565b602002602001015160400151611796565b86838151811061178757611787612dfe565b60200260200101516040015160005b915091506000604051806101600160405280876001600160a01b03168152602001866001600160a01b0316815260200161271062ffffff1681526020018986815181106117e5576117e5612dfe565b60200260200101516000015160020b815260200189868151811061180b5761180b612dfe565b60200260200101516020015160020b81526020018481526020018381526020016127107f00000000000000000000000000000000000000000000000000000000000000008661185a9190612cef565b6118649190612d06565b61186e9086612e14565b81526020016127106118a07f000000000000000000000000000000000000000000000000000000000000000086612cef565b6118aa9190612d06565b6118b49085612e14565b81523060208201526040016118cb4261012c612cdc565b81525090506000876001600160a01b03166321eb3dd76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119349190612ca9565b6001600160a01b03166388316456836040518263ffffffff1660e01b815260040161195f9190612e27565b6080604051808303816000875af115801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190612eeb565b5050509050876001600160a01b03166321eb3dd76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a099190612ca9565b6001600160a01b031663095ea7b3896001600160a01b031663770bc10a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a799190612ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b158015611ad957600080fd5b505af1158015611aed573d6000803e3d6000fd5b5050505060006040518061010001604052808a6001600160a01b03166321eb3dd76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b619190612ca9565b6001600160a01b039081168252602082018590528e811660408301528d1660608201526000196080820152600160a082015260c0016000604051908082528060200260200182016040528015611bc1578160200160208202803683370190505b50815260055460ff161515602091820152604080517f770bc10a00000000000000000000000000000000000000000000000000000000815290519293506001600160a01b038c169263770bc10a926004808401939192918290030181865afa158015611c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c559190612ca9565b6001600160a01b031663e2d37eb5826040518263ffffffff1660e01b8152600401611c809190612f84565b6020604051808303816000875af1158015611c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc39190613029565b508560010195505050505050611738565b50611cdd612076565b505050505050565b60006107eb611cf2611487565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611d3f888888886120ba565b925092509250611d4f8282612189565b50909695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516611dbf576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610c47565b6001600160a01b038416611e02576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610c47565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611e8057836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611e7791815260200190565b60405180910390a35b5050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610b99576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f43611e87565b611efe611e87565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611f4a8482613089565b50600481016114098382613089565b611f61611e87565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102611fad8482613089565b5060038101611fbc8382613089565b5060008082556001909101555050565b611fd4610a8b565b15611ff757611fe28361228d565b611fed83838361234b565b611ff783836123e4565b610db7838383612469565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61202d6125d2565b61203561264e565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600354156120b0576040517fb1f3376700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4260035543600455565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156120f5575060009150600390508261217f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612149573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121755750600092506001915082905061217f565b9250600091508190505b9450945094915050565b600082600381111561219d5761219d613148565b036121a6575050565b60018260038111156121ba576121ba613148565b036121f1576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561220557612205613148565b0361223f576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610c47565b600382600381111561225357612253613148565b03611010576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610c47565b6001600160a01b03811660009081526001602052604090205460ff1615610f8f57326000908152602081815260408083204384529091529020547f00000000000000000000000000000000000000000000000000000000000000001161231f576040517f69e173d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3260009081526020818152604080832043845290915281208054916123438361315e565b919050555050565b6001600160a01b03831660009081526001602052604090205460ff16801561238c57506001600160a01b03821660009081526002602052604090205460ff16155b15610db757612399610f92565b811115610db757806123a9610f92565b6040517f05a2060000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c47565b6004544314801561240d57506001600160a01b03821660009081526001602052604090205460ff165b801561243257506001600160a01b03811660009081526002602052604090205460ff16155b15611010576040517fe45aace100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0384166124b757818160020160008282546124ac9190612cdc565b909155506125429050565b6001600160a01b03841660009081526020829052604090205482811015612523576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610c47565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661256057600281018054839003905561257f565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c491815260200190565b60405180910390a350505050565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816125fe6115b7565b80519091501561261657805160209091012092915050565b81548015612625579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161267a611608565b80519091501561269257805160209091012092915050565b60018201548015612625579392505050565b6000815180845260005b818110156126ca576020818501810151868301820152016126ae565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006126fd60208301846126a4565b9392505050565b6001600160a01b0381168114610f8f57600080fd5b6000806040838503121561272c57600080fd5b823561273781612704565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561277e5761277e612745565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156127ad576127ad612745565b604052919050565b600082601f8301126127c657600080fd5b813567ffffffffffffffff8111156127e0576127e0612745565b6127f3601f8201601f1916602001612784565b81815284602083860101111561280857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561283d57600080fd5b853561284881612704565b9450602086013567ffffffffffffffff81111561286457600080fd5b612870888289016127b5565b945050604086013567ffffffffffffffff81111561288d57600080fd5b612899888289016127b5565b93505060608601356128aa81612704565b9150608086013580151581146128bf57600080fd5b809150509295509295909350565b6000806000806000608086880312156128e557600080fd5b85356128f081612704565b9450602086013561290081612704565b935060408601359250606086013567ffffffffffffffff81111561292357600080fd5b8601601f8101881361293457600080fd5b803567ffffffffffffffff81111561294b57600080fd5b88602082840101111561295d57600080fd5b959894975092955050506020019190565b60008060006060848603121561298357600080fd5b833561298e81612704565b9250602084013561299e81612704565b929592945050506040919091013590565b6000602082840312156129c157600080fd5b81356126fd81612704565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000612a0760e08301896126a4565b8281036040840152612a1981896126a4565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015612a6f578351835260209384019390920191600101612a51565b50909b9a5050505050505050505050565b600067ffffffffffffffff821115612a9a57612a9a612745565b5060051b60200190565b8035600281900b8114612ab657600080fd5b919050565b600080600060608486031215612ad057600080fd5b8335612adb81612704565b92506020840135612aeb81612704565b9150604084013567ffffffffffffffff811115612b0757600080fd5b8401601f81018613612b1857600080fd5b8035612b2b612b2682612a80565b612784565b80828252602082019150602060608402850101925088831115612b4d57600080fd5b6020840193505b82841015612bb1576060848a031215612b6c57600080fd5b612b7461275b565b612b7d85612aa4565b8152612b8b60208601612aa4565b602082810191909152604086810135908301529083526060909401939190910190612b54565b809450505050509250925092565b600080600080600080600060e0888a031215612bda57600080fd5b8735612be581612704565b96506020880135612bf581612704565b95506040880135945060608801359350608088013560ff81168114612c1957600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612c4957600080fd5b8235612c5481612704565b91506020830135612c6481612704565b809150509250929050565b600181811c90821680612c8357607f821691505b602082108103612ca357634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612cbb57600080fd5b81516126fd81612704565b634e487b7160e01b600052601160045260246000fd5b808201808211156107eb576107eb612cc6565b80820281158282048414176107eb576107eb612cc6565b600082612d2357634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215612d3b57600080fd5b8251612d4681612704565b6020840151909250612c6481612704565b600060208284031215612d6957600080fd5b815167ffffffffffffffff811115612d8057600080fd5b8201601f81018413612d9157600080fd5b8051612d9f612b2682612a80565b8082825260208201915060208360051b850101925086831115612dc157600080fd5b6020840193505b82841015612df457835162ffffff81168114612de357600080fd5b825260209384019390910190612dc8565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b818103818111156107eb576107eb612cc6565b81516001600160a01b0316815261016081016020830151612e5360208401826001600160a01b03169052565b506040830151612e6a604084018262ffffff169052565b506060830151612e7f606084018260020b9052565b506080830151612e94608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151612edb6101208401826001600160a01b03169052565b5061014092830151919092015290565b60008060008060808587031215612f0157600080fd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612f2957600080fd5b6040860151606090960151949790965092505050565b600081518084526020840193506020830160005b82811015612f7a5781516001600160a01b0316865260209586019590910190600101612f53565b5093949350505050565b602081526001600160a01b038251166020820152602082015160408201526001600160a01b03604083015116606082015260006060830151612fd160808401826001600160a01b03169052565b50608083015160a083015260a0830151612fef60c084018215159052565b5060c083015161010060e084015261300b610120840182612f3f565b905060e084015161302161010085018215159052565b509392505050565b60006020828403121561303b57600080fd5b5051919050565b601f821115610db757806000526020600020601f840160051c810160208510156130695750805b601f840160051c820191505b81811015611e805760008155600101613075565b815167ffffffffffffffff8111156130a3576130a3612745565b6130b7816130b18454612c6f565b84613042565b6020601f8211600181146130eb57600083156130d35750848201515b600019600385901b1c1916600184901b178455611e80565b600084815260208120601f198516915b8281101561311b57878501518255602094850194600190920191016130fb565b50848210156131395786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60006001820161317057613170612cc6565b506001019056fea26469706673582212207c043076211dfad6cf4e66b851be0fc86a1f9a467b24f250565ebf9fa19bbeaa64736f6c634300081b00330000000000000000000000003082913bb931c2c5c001088ff6130a765219cc190000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000001