[ { "inputs": [ { "internalType": "address", "name": "_mailbox", "type": "address" }, { "internalType": "address", "name": "_feeCollector", "type": "address" }, { "internalType": "uint256", "name": "_mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "_bridgeFee", "type": "uint256" }, { "internalType": "uint256", "name": "_totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "_idMultiplier", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "collector", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "claimedAmount", "type": "uint256" } ], "name": "FeeEarningsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "itemId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeEarnings", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "referrerEarnings", "type": "uint256" } ], "name": "NFTMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "srcAddress", "type": "bytes32" }, { "indexed": true, "internalType": "uint32", "name": "srcChainId", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint32", "name": "dstChainId", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeEarned", "type": "uint256" } ], "name": "NFTSent", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint32", "name": "origin", "type": "uint32" }, { "indexed": true, "internalType": "bytes32", "name": "recipient", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ReceivedTransferRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "claimedAmount", "type": "uint256" } ], "name": "ReferrerEarningsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint32", "name": "destination", "type": "uint32" }, { "indexed": true, "internalType": "bytes32", "name": "recipient", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "SentTransferRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DENOMINATOR", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_tokenBaseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_tokenURIExtension", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "batchMint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "batchMintWithReferrer", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "bridgeFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculateRefShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimRefEarnings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimedFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "commonRefBips", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "destinationGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "domains", "outputs": [ { "internalType": "uint32[]", "name": "", "type": "uint32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" }, { "internalType": "bytes32", "name": "_router", "type": "bytes32" } ], "name": "enrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" }, { "internalType": "bytes32[]", "name": "_addresses", "type": "bytes32[]" } ], "name": "enrollRemoteRouters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeToCollect", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_dstChain", "type": "uint32" } ], "name": "getHyperlaneMessageFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_origin", "type": "uint32" }, { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" } ], "name": "handle", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "hook", "outputs": [ { "internalType": "contract IPostDispatchHook", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "interchainSecurityModule", "outputs": [ { "internalType": "contract IInterchainSecurityModule", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "localDomain", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mailbox", "outputs": [ { "internalType": "contract IMailbox", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "mintWithReferrer", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "personalRefBips", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_destinationDomain", "type": "uint32" } ], "name": "quoteGasPayment", "outputs": [ { "internalType": "uint256", "name": "_gasPayment", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "refAmountClaimed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "refAmountToClaim", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "refTxsCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "resqueFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" } ], "name": "routers", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bridgeFee", "type": "uint256" } ], "name": "setBridgeFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_bips", "type": "uint16" } ], "name": "setCommonRefBips", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "domain", "type": "uint32" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "name": "setDestinationGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "domain", "type": "uint32" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "internalType": "struct GasRouter.GasRouterConfig[]", "name": "gasConfigs", "type": "tuple[]" } ], "name": "setDestinationGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeCollector", "type": "address" } ], "name": "setFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_hook", "type": "address" } ], "name": "setHook", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_module", "type": "address" } ], "name": "setInterchainSecurityModule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintFee", "type": "uint256" } ], "name": "setMintFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint16", "name": "bips", "type": "uint16" } ], "name": "setPersonalRefBips", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "referrers", "type": "address[]" }, { "internalType": "uint16", "name": "bips", "type": "uint16" } ], "name": "setPersonalRefBipsBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_newTokenBaseURI", "type": "string" }, { "internalType": "string", "name": "_fileExtension", "type": "string" } ], "name": "setTokenBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_dstChain", "type": "uint32" }, { "internalType": "bytes32", "name": "_receiver", "type": "bytes32" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "transferRemote", "outputs": [ { "internalType": "bytes32", "name": "messageId", "type": "bytes32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" } ], "name": "unenrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" } ], "name": "unenrollRemoteRouters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101006040523480156200001257600080fd5b5060405162004f5338038062004f538339810160408190526200003591620002f0565b6040518060400160405280600781526020016611d95d135a5b9d60ca1b81525060405180604001604052806002815260200161474d60f01b815250878080808062000086816200027260201b60201c565b620000d85760405162461bcd60e51b815260206004820152601e60248201527f4d61696c626f78436c69656e743a20696e76616c6964206d61696c626f78000060448201526064015b60405180910390fd5b6001600160a01b03821660808190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa15801562000123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014991906200034d565b63ffffffff1660a0526200015d3362000281565b50505050508160cb908162000173919062000421565b5060cc62000182828262000421565b505060d5805460ff1916905550600160d6556001600160a01b038516620001ec5760405162461bcd60e51b815260206004820152601e60248201527f46656520636f6c6c6563746f72206d757374206265206e6f6e2d7a65726f00006044820152606401620000cf565b60da80546001600160a01b0319166001600160a01b03871617905560dc84905560db8390556200021d818362000503565b6200022a90600162000523565b60c0526200023a81600162000523565b62000246908362000503565b60e05262000255818362000503565b6200026290600162000523565b60d7555062000539945050505050565b6001600160a01b03163b151590565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b0381168114620002eb57600080fd5b919050565b60008060008060008060c087890312156200030a57600080fd5b6200031587620002d3565b95506200032560208801620002d3565b945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000602082840312156200036057600080fd5b815163ffffffff811681146200037557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003a757607f821691505b602082108103620003c857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041c57600081815260208120601f850160051c81016020861015620003f75750805b601f850160051c820191505b81811015620004185782815560010162000403565b5050505b505050565b81516001600160401b038111156200043d576200043d6200037c565b62000455816200044e845462000392565b84620003ce565b602080601f8311600181146200048d5760008415620004745750858301515b600019600386901b1c1916600185901b17855562000418565b600085815260208120601f198616915b82811015620004be578886015182559484019460019091019084016200049d565b5085821015620004dd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200051d576200051d620004ed565b92915050565b808201808211156200051d576200051d620004ed565b60805160a05160c05160e0516149af620005a460003960008181610969015281816110f7015281816117c301528181611da40152611f2001526000610b20015260006108d9015260008181610bac0152818161164601528181613296015261393501526149af6000f3fe60806040526004361061041b5760003560e01c806381b4e8b41161021e578063c415b95c11610123578063de523cf3116100ab578063eddd0d9c1161007a578063eddd0d9c14610c88578063efae508a14610ca8578063f2ed8c5314610cc8578063f2fde38b14610ce8578063f39c504c14610d0857600080fd5b8063de523cf314610bce578063e3d078dc14610bee578063e9198bf914610c1f578063e985e9c514610c3f57600080fd5b8063ce6e23b2116100f2578063ce6e23b214610b0e578063d082e38114610b42578063d11ba61414610b58578063d294f09314610b85578063d5438eae14610b9a57600080fd5b8063c415b95c14610a93578063c87b56dd14610ab3578063cb253c4614610ad3578063cbc1418a14610aee57600080fd5b80639236197a116101a6578063a22cb46511610175578063a22cb465146109f3578063a42dce8014610a13578063b1bd643614610a33578063b49c53a714610a53578063b88d4fde14610a7357600080fd5b80639236197a1461098b57806395d89b41146109ab578063998cdf83146109c0578063a14d4699146109e057600080fd5b80638cfd1a65116101ed5780638cfd1a65146108b25780638d3638f4146108c75780638da5cb5b14610910578063918f86741461092e57806391ba317a1461095757600080fd5b806381b4e8b41461086157806382b12dd7146108745780638456cb591461088a5780638467be0d1461089f57600080fd5b806342aeaaf9116103245780636141cc09116102ac578063715018a61161027b578063715018a6146107c957806371a15b38146107de578063775313a1146107fe578063777133dd1461082b5780637f5a7c7b1461084157600080fd5b80636141cc091461075e5780636352211e14610774578063641ddc2e1461079457806370a08231146107a957600080fd5b80634e886281116102f35780634e886281146106e05780634f6ccce71461070057806356d5d475146107205780635c975abb146107335780635f74172c1461074b57600080fd5b806342aeaaf914610651578063440df4f41461067e57806349d462ef146106a05780634b7784c1146106c057600080fd5b806323b872dd116103a757806337bb76dc1161037657806337bb76dc146105c75780633ca4fb76146105e75780633dfd3873146105fc5780633f4ba83a1461061c57806342842e0e1461063157600080fd5b806323b872dd146105475780632643bf5f146105675780632ead72f6146105875780632f745c59146105a757600080fd5b80630b2b1955116103ee5780630b2b1955146104d15780630e72cc06146104e65780631249c58b1461050657806313966db51461050e57806318160ddd1461053257600080fd5b806301ffc9a71461042057806306fdde0314610455578063081812fc14610477578063095ea7b3146104af575b600080fd5b34801561042c57600080fd5b5061044061043b366004613c31565b610d35565b60405190151581526020015b60405180910390f35b34801561046157600080fd5b5061046a610d60565b60405161044c9190613c9e565b34801561048357600080fd5b50610497610492366004613cb1565b610df2565b6040516001600160a01b03909116815260200161044c565b3480156104bb57600080fd5b506104cf6104ca366004613ce6565b610e19565b005b3480156104dd57600080fd5b506104cf610f33565b3480156104f257600080fd5b506104cf610501366004613d10565b61105a565b6104cf6110c1565b34801561051a57600080fd5b5061052460dc5481565b60405190815260200161044c565b34801561053e57600080fd5b5060d354610524565b34801561055357600080fd5b506104cf610562366004613d2b565b6111ac565b34801561057357600080fd5b506104cf610582366004613d79565b6111dd565b34801561059357600080fd5b506105246105a2366004613da8565b611223565b3480156105b357600080fd5b506105246105c2366004613ce6565b611242565b3480156105d357600080fd5b506104cf6105e2366004613dc3565b6112d8565b3480156105f357600080fd5b5061046a611335565b34801561060857600080fd5b506104cf610617366004613d10565b6113c3565b34801561062857600080fd5b506104cf61142a565b34801561063d57600080fd5b506104cf61064c366004613d2b565b611442565b34801561065d57600080fd5b5061052461066c366004613d10565b60e16020526000908152604090205481565b34801561068a57600080fd5b5061069361145d565b60405161044c9190613df6565b3480156106ac57600080fd5b506104cf6106bb366004613e40565b61146e565b3480156106cc57600080fd5b506104cf6106db366004613ea0565b611494565b3480156106ec57600080fd5b506105246106fb366004613ce6565b61153e565b34801561070c57600080fd5b5061052461071b366004613cb1565b6115a8565b6104cf61072e366004613f34565b61163b565b34801561073f57600080fd5b5060d55460ff16610440565b6104cf610759366004613f8d565b61173a565b34801561076a57600080fd5b5061052460de5481565b34801561078057600080fd5b5061049761078f366004613cb1565b611901565b3480156107a057600080fd5b506104cf611961565b3480156107b557600080fd5b506105246107c4366004613d10565b611ae7565b3480156107d557600080fd5b506104cf611af2565b3480156107ea57600080fd5b506104cf6107f9366004613fb0565b611b04565b34801561080a57600080fd5b50610524610819366004613da8565b60ca6020526000908152604090205481565b34801561083757600080fd5b5061052460dd5481565b34801561084d57600080fd5b50606554610497906001600160a01b031681565b61052461086f366004613ff1565b611b59565b34801561088057600080fd5b5061052460db5481565b34801561089657600080fd5b506104cf611d40565b6104cf6108ad366004613cb1565b611d58565b3480156108be57600080fd5b5061046a611e68565b3480156108d357600080fd5b506108fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161044c565b34801561091c57600080fd5b506033546001600160a01b0316610497565b34801561093a57600080fd5b5061094461271081565b60405161ffff909116815260200161044c565b34801561096357600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b34801561099757600080fd5b506105246109a6366004613da8565b611e75565b3480156109b757600080fd5b5061046a611e91565b3480156109cc57600080fd5b506104cf6109db366004613cb1565b611ea0565b6104cf6109ee366004613d10565b611ead565b3480156109ff57600080fd5b506104cf610a0e366004614024565b612048565b348015610a1f57600080fd5b506104cf610a2e366004613d10565b612053565b348015610a3f57600080fd5b506104cf610a4e366004614060565b6120f1565b348015610a5f57600080fd5b506104cf610a6e366004613e40565b612176565b348015610a7f57600080fd5b506104cf610a8e3660046140ea565b612188565b348015610a9f57600080fd5b5060da54610497906001600160a01b031681565b348015610abf57600080fd5b5061046a610ace366004613cb1565b6121b9565b348015610adf57600080fd5b5060df546109449061ffff1681565b348015610afa57600080fd5b506104cf610b093660046141c5565b6121f0565b348015610b1a57600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b348015610b4e57600080fd5b5061052460d75481565b348015610b6457600080fd5b50610524610b73366004613d10565b60e26020526000908152604090205481565b348015610b9157600080fd5b506104cf612213565b348015610ba657600080fd5b506104977f000000000000000000000000000000000000000000000000000000000000000081565b348015610bda57600080fd5b50606654610497906001600160a01b031681565b348015610bfa57600080fd5b50610944610c09366004613d10565b60e06020526000908152604090205461ffff1681565b348015610c2b57600080fd5b506104cf610c3a366004614224565b6123f3565b348015610c4b57600080fd5b50610440610c5a366004614283565b6001600160a01b03918216600090815260d06020908152604080832093909416825291909152205460ff1690565b348015610c9457600080fd5b506104cf610ca3366004613cb1565b6124a2565b348015610cb457600080fd5b506104cf610cc3366004613da8565b6124af565b348015610cd457600080fd5b50610524610ce3366004613da8565b6124c0565b348015610cf457600080fd5b506104cf610d03366004613d10565b6124db565b348015610d1457600080fd5b50610524610d23366004613d10565b60e36020526000908152604090205481565b60006001600160e01b0319821663780e9d6360e01b1480610d5a5750610d5a82612551565b92915050565b606060cb8054610d6f906142ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9b906142ad565b8015610de85780601f10610dbd57610100808354040283529160200191610de8565b820191906000526020600020905b815481529060010190602001808311610dcb57829003601f168201915b5050505050905090565b6000610dfd826125a1565b50600090815260cf60205260409020546001600160a01b031690565b6000610e2482611901565b9050806001600160a01b0316836001600160a01b031603610e965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610eb25750610eb28133610c5a565b610f245760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610e8d565b610f2e8383612600565b505050565b60da546001600160a01b0316336001600160a01b03161480610f5f57506033546001600160a01b031633145b610fbf5760405162461bcd60e51b815260206004820152602b60248201527f5265737175653a204f6e6c792066656520636f6c6c6563746f72206f72206f7760448201526a1b995c88185b1b1bddd95960aa1b6064820152608401610e8d565b604051600090339047908381818185875af1925050503d8060008114611001576040519150601f19603f3d011682016040523d82523d6000602084013e611006565b606091505b50509050806110575760405162461bcd60e51b815260206004820152601d60248201527f5265737175653a20204661696c656420746f2073656e642045746865720000006044820152606401610e8d565b50565b806001600160a01b0381163b15158061107a57506001600160a01b038116155b6110965760405162461bcd60e51b8152600401610e8d906142e7565b61109e61266e565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b6110c96126c8565b6110d1612721565b60dc5434146110f25760405162461bcd60e51b8152600401610e8d9061432e565b60d7547f00000000000000000000000000000000000000000000000000000000000000008111156111355760405162461bcd60e51b8152600401610e8d90614372565b60d760008154611144906143c9565b9091555060dc5460dd805460009061115d9084906143e2565b9091555061116e9050335b82612767565b60dc5460408051918252600060208301819052918391339160008051602061495a833981519152910160405180910390a4506111aa600160d655565b565b6111b63382612781565b6111d25760405162461bcd60e51b8152600401610e8d906143f5565b610f2e8383836127ff565b6111e561266e565b61271061ffff8216111561120b5760405162461bcd60e51b8152600401610e8d90614442565b60df805461ffff191661ffff92909216919091179055565b60008061123a609763ffffffff8086169061297016565b949350505050565b600061124d83612989565b82106112af5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610e8d565b506001600160a01b0391909116600090815260d160209081526040808320938352929052205490565b6112e061266e565b61271061ffff821611156113065760405162461bcd60e51b8152600401610e8d90614442565b6001600160a01b0391909116600090815260e060205260409020805461ffff191661ffff909216919091179055565b60d88054611342906142ad565b80601f016020809104026020016040519081016040528092919081815260200182805461136e906142ad565b80156113bb5780601f10611390576101008083540402835291602001916113bb565b820191906000526020600020905b81548152906001019060200180831161139e57829003601f168201915b505050505081565b806001600160a01b0381163b1515806113e357506001600160a01b038116155b6113ff5760405162461bcd60e51b8152600401610e8d906142e7565b61140761266e565b50606580546001600160a01b0319166001600160a01b0392909216919091179055565b61143261266e565b61143a612a0f565b6111aa612a58565b610f2e83838360405180602001604052806000815250612188565b60606114696097612aaa565b905090565b61147661266e565b63ffffffff91909116600090815260ca6020526040902055565b5050565b61149c61266e565b61271061ffff821611156114c25760405162461bcd60e51b8152600401610e8d90614442565b60005b82811015611538578160e060008686858181106114e4576114e461448c565b90506020020160208101906114f99190613d10565b6001600160a01b031681526020810191909152604001600020805461ffff191661ffff9290921691909117905580611530816143c9565b9150506114c5565b50505050565b6001600160a01b038216600090815260e0602052604081205461ffff168181156115685781611570565b60df5461ffff165b90508060000361158557600092505050610d5a565b600061271061159483876144a2565b61159e91906144b9565b9695505050505050565b60006115b360d35490565b82106116165760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610e8d565b60d382815481106116295761162961448c565b90600052602060002001549050919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116bd5760405162461bcd60e51b815260206004820152602160248201527f4d61696c626f78436c69656e743a2073656e646572206e6f74206d61696c626f6044820152600f60fb1b6064820152608401610e8d565b60006116c885612b64565b90508381146117275760405162461bcd60e51b815260206004820152602560248201527f456e726f6c6c656420726f7574657220646f6573206e6f74206d61746368207360448201526432b73232b960d91b6064820152608401610e8d565b61173385858585612bb0565b5050505050565b6117426126c8565b61174a612721565b336001600160a01b0382161480159061176b57506001600160a01b03811615155b6117875760405162461bcd60e51b8152600401610e8d906144db565b8160dc5461179591906144a2565b34146117b35760405162461bcd60e51b8152600401610e8d9061432e565b60005b828110156118f65760d7547f00000000000000000000000000000000000000000000000000000000000000008111156118015760405162461bcd60e51b8152600401610e8d90614372565b60dc546000611810858361153e565b905060d760008154611821906143c9565b9091555061182f8183614522565b60dd600082825461184091906143e2565b90915550506001600160a01b038516600090815260e260205260408120805483929061186d9084906143e2565b90915550506001600160a01b038516600090815260e1602052604081208054909190611898906143c9565b909155506118a7335b84612767565b60dc5460408051918252602082018390526001600160a01b038716918591339160008051602061495a833981519152910160405180910390a450505080806118ee906143c9565b9150506117b6565b50611490600160d655565b600081815260cd60205260408120546001600160a01b031680610d5a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610e8d565b6119696126c8565b33600090815260e26020526040902054806119b95760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401610e8d565b33600081815260e26020908152604080832083905560e3909152812080548492906119e59084906143e2565b90915550506040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611a35576040519150601f19603f3d011682016040523d82523d6000602084013e611a3a565b606091505b5050905080611a975760405162461bcd60e51b8152602060048201526024808201527f526566657272616c53797374656d3a204661696c656420746f2073656e6420456044820152633a3432b960e11b6064820152608401610e8d565b816001600160a01b03167fa6183a81b1ce4e0d90156f6ec9b6f2d13c204d11884302b40b47bb456fb5915684604051611ad291815260200190565b60405180910390a25050506111aa600160d655565b6000610d5a82612989565b611afa61266e565b6111aa6000612c3a565b611b0c61266e565b8060005b8181101561153857611b47848483818110611b2d57611b2d61448c565b9050602002016020810190611b429190613da8565b612c8c565b611b526001826143e2565b9050611b10565b6000611b636126c8565b611b6b612721565b82611bb85760405162461bcd60e51b815260206004820152601f60248201527f4765744d696e744e46543732313a20496e76616c6964207265636569766572006044820152606401610e8d565b611bc3335b83612781565b611c2c5760405162461bcd60e51b815260206004820152603460248201527f4765744d696e744e46543732313a2073656e642063616c6c6572206973206e6f6044820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b6064820152608401610e8d565b6000611c3785611e75565b905060db5481611c4791906143e2565b341015611ca55760405162461bcd60e51b815260206004820152602660248201527f4765744d696e744e46543732313a20496e636f7272656374206d6573736167656044820152652076616c756560d01b6064820152608401610e8d565b60db5460dd6000828254611cb991906143e2565b92505081905550611cd985858560db5434611cd49190614522565b612cc7565b60db546040805186815260208101929092529193506001600160a01b0386169163ffffffff88169133917f8c76f9a0946e85f2e4c199f247a3436d1766156d4ce90144bf16dfb353878ade910160405180910390a450611d39600160d655565b9392505050565b611d4861266e565b611d50612721565b6111aa612d36565b611d606126c8565b611d68612721565b8060dc54611d7691906144a2565b3414611d945760405162461bcd60e51b8152600401610e8d9061432e565b60005b81811015611e5d5760d7547f0000000000000000000000000000000000000000000000000000000000000000811115611de25760405162461bcd60e51b8152600401610e8d90614372565b60d760008154611df1906143c9565b9091555060dc5460dd8054600090611e0a9084906143e2565b90915550611e19905033611168565b60dc5460408051918252600060208301819052918391339160008051602061495a833981519152910160405180910390a45080611e55816143c9565b915050611d97565b50611057600160d655565b60d98054611342906142ad565b600080611d398360405180602001604052806000815250612d73565b606060cc8054610d6f906142ad565b611ea861266e565b60db55565b611eb56126c8565b611ebd612721565b336001600160a01b03821614801590611ede57506001600160a01b03811615155b611efa5760405162461bcd60e51b8152600401610e8d906144db565b60dc543414611f1b5760405162461bcd60e51b8152600401610e8d9061432e565b60d7547f0000000000000000000000000000000000000000000000000000000000000000811115611f5e5760405162461bcd60e51b8152600401610e8d90614372565b60dc546000611f6d848361153e565b905060d760008154611f7e906143c9565b90915550611f8c8183614522565b60dd6000828254611f9d91906143e2565b90915550506001600160a01b038416600090815260e2602052604081208054839290611fca9084906143e2565b90915550506001600160a01b038416600090815260e1602052604081208054909190611ff5906143c9565b90915550612002336118a1565b60dc5460408051918252602082018390526001600160a01b038616918591339160008051602061495a833981519152910160405180910390a4505050611057600160d655565b611490338383612d8c565b61205b61266e565b6001600160a01b0381166120cf5760405162461bcd60e51b815260206004820152603560248201527f4765744d696e744e46543732313a2046656520636f6c6c6563746f72206d757360448201527474206265206e6f6e2d7a65726f206164647265737360581b6064820152608401610e8d565b60da80546001600160a01b0319166001600160a01b0392909216919091179055565b6120f961266e565b60005b81811015610f2e576121648383838181106121195761211961448c565b61212f9260206040909202019081019150613da8565b8484848181106121415761214161448c565b9050604002016020013563ffffffff909116600090815260ca6020526040902055565b61216f6001826143e2565b90506120fc565b61217e61266e565b6114908282612e5a565b61219133611bbd565b6121ad5760405162461bcd60e51b8152600401610e8d906143f5565b61153884848484612e70565b606060d86121c683612ea3565b60d96040516020016121da939291906145a8565b6040516020818303038152906040529050919050565b6121f861266e565b60d8612205848683614621565b5060d9611733828483614621565b61221b6126c8565b60da546001600160a01b0316336001600160a01b0316146122905760405162461bcd60e51b815260206004820152602960248201527f4765744d696e744e46543732313a204f6e6c792066656520636f6c6c6563746f6044820152681c88185b1b1bddd95960ba1b6064820152608401610e8d565b60dd5460008190036122e45760405162461bcd60e51b815260206004820152601f60248201527f4765744d696e744e46543732313a204e6f7468696e6720746f20636c61696d006044820152606401610e8d565b600060dd819055508060de60008282546122fe91906143e2565b909155505060da546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612350576040519150601f19603f3d011682016040523d82523d6000602084013e612355565b606091505b50509050806123b25760405162461bcd60e51b815260206004820152602360248201527f4765744d696e744e46543732313a204661696c656420746f2073656e642045746044820152623432b960e91b6064820152608401610e8d565b60405182815233907f582c87414358df39212a275853c71633d2dc65d15ae92cc5718e7438766bea769060200160405180910390a250506111aa600160d655565b6123fb61266e565b8281146124345760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610e8d565b8260005b8181101561249a576124888686838181106124555761245561448c565b905060200201602081019061246a9190613da8565b85858481811061247c5761247c61448c565b90506020020135612e5a565b6124936001826143e2565b9050612438565b505050505050565b6124aa61266e565b60dc55565b6124b761266e565b61105781612c8c565b6000610d5a8260405180602001604052806000815250612d73565b6124e361266e565b6001600160a01b0381166125485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e8d565b61105781612c3a565b60006001600160e01b031982166380ac58cd60e01b148061258257506001600160e01b03198216635b5e139f60e01b145b80610d5a57506301ffc9a760e01b6001600160e01b0319831614610d5a565b600081815260cd60205260409020546001600160a01b03166110575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610e8d565b600081815260cf6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061263582611901565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6033546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e8d565b600260d6540361271a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e8d565b600260d655565b60d55460ff16156111aa5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610e8d565b611490828260405180602001604052806000815250612f35565b60008061278d83611901565b9050806001600160a01b0316846001600160a01b031614806127d457506001600160a01b03808216600090815260d0602090815260408083209388168352929052205460ff165b8061123a5750836001600160a01b03166127ed84610df2565b6001600160a01b031614949350505050565b826001600160a01b031661281282611901565b6001600160a01b0316146128385760405162461bcd60e51b8152600401610e8d906146e0565b6001600160a01b03821661289a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610e8d565b6128a78383836001612f68565b826001600160a01b03166128ba82611901565b6001600160a01b0316146128e05760405162461bcd60e51b8152600401610e8d906146e0565b600081815260cf6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260ce855283862080546000190190559087168086528386208054600101905586865260cd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008061297d8484613095565b915091505b9250929050565b60006001600160a01b0382166129f35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610e8d565b506001600160a01b0316600090815260ce602052604090205490565b60d55460ff166111aa5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610e8d565b612a60612a0f565b60d5805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60606000612ab7836130cf565b905080516001600160401b03811115612ad257612ad26140d4565b604051908082528060200260200182016040528015612afb578160200160208202803683370190505b50915060005b8151811015612b5d57818181518110612b1c57612b1c61448c565b6020026020010151838281518110612b3657612b3661448c565b63ffffffff9092166020928302919091019091015280612b55816143c9565b915050612b01565b5050919050565b60008080612b7c609763ffffffff8087169061297016565b9150915081612b8a85613169565b90612ba85760405162461bcd60e51b8152600401610e8d9190613c9e565b509392505050565b6000612bbc838361318a565b90506000612bca84846131a2565b9050366000612bd986866131b2565b91509150612bef612be78590565b8484846131c2565b838863ffffffff167fba20947a325f450d232530e5f5fce293e7963499d5309a07cee84a269f2f15a685604051612c2891815260200190565b60405180910390a35050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612ca0609763ffffffff808416906131cc16565b612ca982613169565b906114905760405162461bcd60e51b8152600401610e8d9190613c9e565b600080612cd3846131d8565b9050612cea8684612ce5888886613240565b61326f565b9150848663ffffffff167fd229aacb94204188fe8042965fa6b269c62dc5818b21238779ab64bdd17efeec86604051612d2591815260200190565b60405180910390a350949350505050565b612d3e612721565b60d5805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a8d3390565b600080612d7f84612b64565b905061123a848285613292565b816001600160a01b0316836001600160a01b031603612ded5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610e8d565b6001600160a01b03838116600081815260d06020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611490609763ffffffff80851690849061334116565b612e7b8484846127ff565b612e878484848461334c565b6115385760405162461bcd60e51b8152600401610e8d90614725565b60606000612eb08361344d565b60010190506000816001600160401b03811115612ecf57612ecf6140d4565b6040519080825280601f01601f191660200182016040528015612ef9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612f0357509392505050565b612f3f8383613525565b612f4c600084848461334c565b610f2e5760405162461bcd60e51b8152600401610e8d90614725565b6001811115612fd75760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610e8d565b816001600160a01b0385166130335761302e8160d38054600083815260d460205260408120829055600182018355919091527f915c3eb987b20e1af620c1403197bf687fb7f18513b3a73fde6e78c7072c41a60155565b613056565b836001600160a01b0316856001600160a01b0316146130565761305685826136be565b6001600160a01b0384166130725761306d8161375b565b611733565b846001600160a01b0316846001600160a01b03161461173357611733848261380a565b60008181526002830160205260408120548190806130c4576130b7858561384e565b9250600091506129829050565b600192509050612982565b606060006130dc8361385a565b9050806001600160401b038111156130f6576130f66140d4565b60405190808252806020026020018201604052801561311f578160200160208202803683370190505b50915060005b81811015612b5d576131378482613865565b60001c83828151811061314c5761314c61448c565b602090810291909101015280613161816143c9565b915050613125565b606061317a8263ffffffff16612ea3565b6040516020016121da9190614777565b600061319960208284866147bc565b611d39916147e6565b60006131996040602084866147bc565b36600061297d83604081876147bc565b6115388484612767565b6000611d398383613871565b6060336131e483611901565b6001600160a01b0316146132235760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401610e8d565b61322c8261388e565b505060408051602081019091526000815290565b606083838360405160200161325793929190614804565b60405160208183030381529060405290509392505050565b60008061327b85612b64565b905061328985828686613931565b95945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381d2ea958585856132cf896139e3565b6065546040516001600160e01b031960e088901b16815261330095949392916001600160a01b031690600401614831565b602060405180830381865afa15801561331d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a9190614883565b611538838383613a05565b60006001600160a01b0384163b1561344257604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061339090339089908890889060040161489c565b6020604051808303816000875af19250505080156133cb575060408051601f3d908101601f191682019092526133c8918101906148cf565b60015b613428573d8080156133f9576040519150601f19603f3d011682016040523d82523d6000602084013e6133fe565b606091505b5080516000036134205760405162461bcd60e51b8152600401610e8d90614725565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061123a565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061348c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106134b8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106134d657662386f26fc10000830492506010015b6305f5e10083106134ee576305f5e100830492506008015b612710831061350257612710830492506004015b60648310613514576064830492506002015b600a8310610d5a5760010192915050565b6001600160a01b03821661357b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e8d565b600081815260cd60205260409020546001600160a01b0316156135e05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e8d565b6135ee600083836001612f68565b600081815260cd60205260409020546001600160a01b0316156136535760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e8d565b6001600160a01b038216600081815260ce602090815260408083208054600101905584835260cd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016136cb84612989565b6136d59190614522565b600083815260d26020526040902054909150808214613728576001600160a01b038416600090815260d160209081526040808320858452825280832054848452818420819055835260d290915290208190555b50600091825260d2602090815260408084208490556001600160a01b03909416835260d181528383209183525290812055565b60d35460009061376d90600190614522565b600083815260d4602052604081205460d380549394509092849081106137955761379561448c565b906000526020600020015490508060d383815481106137b6576137b661448c565b600091825260208083209091019290925582815260d4909152604080822084905585825281205560d38054806137ee576137ee6148ec565b6001900381819060005260206000200160009055905550505050565b600061381583612989565b6001600160a01b03909316600090815260d160209081526040808320868452825280832085905593825260d29052919091209190915550565b6000611d398383613a22565b6000610d5a82613a3a565b6000611d398383613a44565b60008181526002830160205260408120819055611d398383613a6e565b600061389982611901565b90506138a9816000846001612f68565b6138b282611901565b600083815260cf6020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260ce8452828520805460001901905587855260cd909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310b83dc08487878661396f8b6139e3565b6065546040516001600160e01b031960e089901b1681526139a095949392916001600160a01b031690600401614831565b60206040518083038185885af11580156139be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132899190614883565b63ffffffff8116600090815260ca6020526040902054606090610d5a90613a7a565b6000828152600284016020526040812082905561123a8484613a98565b60008181526001830160205260408120541515611d39565b6000610d5a825490565b6000826000018281548110613a5b57613a5b61448c565b9060005260206000200154905092915050565b6000611d398383613aa4565b6060610d5a6000833360405180602001604052806000815250613b97565b6000611d398383613bcc565b60008181526001830160205260408120548015613b8d576000613ac8600183614522565b8554909150600090613adc90600190614522565b9050818114613b41576000866000018281548110613afc57613afc61448c565b9060005260206000200154905080876000018481548110613b1f57613b1f61448c565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b5257613b526148ec565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d5a565b6000915050610d5a565b6060600185858585604051602001613bb3959493929190614902565b6040516020818303038152906040529050949350505050565b6000818152600183016020526040812054613c1357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d5a565b506000610d5a565b6001600160e01b03198116811461105757600080fd5b600060208284031215613c4357600080fd5b8135611d3981613c1b565b60005b83811015613c69578181015183820152602001613c51565b50506000910152565b60008151808452613c8a816020860160208601613c4e565b601f01601f19169290920160200192915050565b602081526000611d396020830184613c72565b600060208284031215613cc357600080fd5b5035919050565b80356001600160a01b0381168114613ce157600080fd5b919050565b60008060408385031215613cf957600080fd5b613d0283613cca565b946020939093013593505050565b600060208284031215613d2257600080fd5b611d3982613cca565b600080600060608486031215613d4057600080fd5b613d4984613cca565b9250613d5760208501613cca565b9150604084013590509250925092565b803561ffff81168114613ce157600080fd5b600060208284031215613d8b57600080fd5b611d3982613d67565b803563ffffffff81168114613ce157600080fd5b600060208284031215613dba57600080fd5b611d3982613d94565b60008060408385031215613dd657600080fd5b613ddf83613cca565b9150613ded60208401613d67565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613e3457835163ffffffff1683529284019291840191600101613e12565b50909695505050505050565b60008060408385031215613e5357600080fd5b613d0283613d94565b60008083601f840112613e6e57600080fd5b5081356001600160401b03811115613e8557600080fd5b6020830191508360208260051b850101111561298257600080fd5b600080600060408486031215613eb557600080fd5b83356001600160401b03811115613ecb57600080fd5b613ed786828701613e5c565b9094509250613eea905060208501613d67565b90509250925092565b60008083601f840112613f0557600080fd5b5081356001600160401b03811115613f1c57600080fd5b60208301915083602082850101111561298257600080fd5b60008060008060608587031215613f4a57600080fd5b613f5385613d94565b93506020850135925060408501356001600160401b03811115613f7557600080fd5b613f8187828801613ef3565b95989497509550505050565b60008060408385031215613fa057600080fd5b82359150613ded60208401613cca565b60008060208385031215613fc357600080fd5b82356001600160401b03811115613fd957600080fd5b613fe585828601613e5c565b90969095509350505050565b60008060006060848603121561400657600080fd5b61400f84613d94565b95602085013595506040909401359392505050565b6000806040838503121561403757600080fd5b61404083613cca565b91506020830135801515811461405557600080fd5b809150509250929050565b6000806020838503121561407357600080fd5b82356001600160401b038082111561408a57600080fd5b818501915085601f83011261409e57600080fd5b8135818111156140ad57600080fd5b8660208260061b85010111156140c257600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561410057600080fd5b61410985613cca565b935061411760208601613cca565b92506040850135915060608501356001600160401b038082111561413a57600080fd5b818701915087601f83011261414e57600080fd5b813581811115614160576141606140d4565b604051601f8201601f19908116603f01168101908382118183101715614188576141886140d4565b816040528281528a60208487010111156141a157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600080604085870312156141db57600080fd5b84356001600160401b03808211156141f257600080fd5b6141fe88838901613ef3565b9096509450602087013591508082111561421757600080fd5b50613f8187828801613ef3565b6000806000806040858703121561423a57600080fd5b84356001600160401b038082111561425157600080fd5b61425d88838901613e5c565b9096509450602087013591508082111561427657600080fd5b50613f8187828801613e5c565b6000806040838503121561429657600080fd5b61429f83613cca565b9150613ded60208401613cca565b600181811c908216806142c157607f821691505b6020821081036142e157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526027908201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060408201526673657474696e6760c81b606082015260800190565b60208082526024908201527f4765744d696e744e46543732313a20496e73756666696369656e74206d696e746040820152632066656560e01b606082015260800190565b60208082526021908201527f4765744d696e744e46543732313a204d696e742065786365656473206c696d696040820152601d60fa1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000600182016143db576143db6143b3565b5060010190565b80820180821115610d5a57610d5a6143b3565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602a908201527f526566657272616c53797374656d3a20526566657272616c20626970732061726040820152690ca40e8dede40d0d2ced60b31b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610d5a57610d5a6143b3565b6000826144d657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f4765744d696e744e46543732313a20496e76616c6964207265666572726572206040820152666164647265737360c81b606082015260800190565b81810381811115610d5a57610d5a6143b3565b60008154614542816142ad565b6001828116801561455a576001811461456f5761459e565b60ff198416875282151583028701945061459e565b8560005260208060002060005b858110156145955781548a82015290840190820161457c565b50505082870194505b5050505092915050565b60006145b48286614535565b84516145c4818360208901613c4e565b6145d081830186614535565b979650505050505050565b601f821115610f2e57600081815260208120601f850160051c810160208610156146025750805b601f850160051c820191505b8181101561249a5782815560010161460e565b6001600160401b03831115614638576146386140d4565b61464c8361464683546142ad565b836145db565b6000601f84116001811461468057600085156146685750838201355b600019600387901b1c1916600186901b178355611733565b600083815260209020601f19861690835b828110156146b15786850135825560209485019460019092019101614691565b50868210156146ce5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f4e6f20726f7574657220656e726f6c6c656420666f7220646f6d61696e3a20008152600082516147af81601f850160208701613c4e565b91909101601f0192915050565b600080858511156147cc57600080fd5b838611156147d957600080fd5b5050820193919092039150565b80356020831015610d5a57600019602084900360031b1b1692915050565b83815282602082015260008251614822816040850160208701613c4e565b91909101604001949350505050565b63ffffffff8616815284602082015260a06040820152600061485660a0830186613c72565b82810360608401526148688186613c72565b91505060018060a01b03831660808301529695505050505050565b60006020828403121561489557600080fd5b5051919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061159e90830184613c72565b6000602082840312156148e157600080fd5b8151611d3981613c1b565b634e487b7160e01b600052603160045260246000fd5b61ffff60f01b8660f01b1681528460028201528360228201526bffffffffffffffffffffffff198360601b16604282015260008251614948816056850160208701613c4e565b91909101605601969550505050505056fedc9e7f115f499a243fe74d676de78b20c5c147ba36ff1e3bfc8d9f1821d30385a26469706673582212200dbea87b85038fba469b19bb6460a59d9720a74a88129da45ae72738643a942d64736f6c634300081300330000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000001914bd28f627031bd6fa0d82bc717548208d0000000000000000000000000000000000000000000000000000000e35fa931a0000000000000000000000000000000000000000000000000000000246139ca80000000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000010