[ { "inputs": [ { "internalType": "contract IERC20", "name": "_USDC", "type": "address" }, { "internalType": "contract IERC20", "name": "_CASH", "type": "address" }, { "internalType": "contract IERC20", "name": "_DRUG", "type": "address" }, { "internalType": "contract ITraits", "name": "_traits", "type": "address" }, { "internalType": "contract IRandomSource", "name": "_randomSource", "type": "address" }, { "internalType": "contract IRichcityNFT", "name": "_RichcityNFT", "type": "address" }, { "internalType": "address", "name": "_feeAccount1", "type": "address" }, { "internalType": "address", "name": "_feeAccount2", "type": "address" } ], "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": "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": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TokenMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TokenUpgrade", "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": "CASH", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DRUG", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PUBLIC_PRICE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RichcityNFT", "outputs": [ { "internalType": "contract IRichcityNFT", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "USDC", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "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": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeAccount1", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeAccount2", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "firstMinted", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "seed", "type": "uint256" } ], "name": "getMintPossibility", "outputs": [ { "internalType": "uint8", "name": "p", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenTraits", "outputs": [ { "components": [ { "internalType": "uint8", "name": "body", "type": "uint8" }, { "internalType": "uint8", "name": "clothes", "type": "uint8" }, { "internalType": "uint8", "name": "hair", "type": "uint8" }, { "internalType": "uint8", "name": "jewelry", "type": "uint8" }, { "internalType": "uint8", "name": "tatto", "type": "uint8" }, { "internalType": "uint8", "name": "belt", "type": "uint8" }, { "internalType": "uint8", "name": "sunglass", "type": "uint8" }, { "internalType": "uint8", "name": "hat", "type": "uint8" }, { "internalType": "uint8", "name": "mask", "type": "uint8" }, { "internalType": "uint8", "name": "weapon", "type": "uint8" } ], "internalType": "struct RichCityV2NFT.TokenTrait", "name": "", "type": "tuple" }, { "components": [ { "internalType": "uint8", "name": "gen", "type": "uint8" }, { "internalType": "uint8", "name": "level", "type": "uint8" }, { "internalType": "uint8", "name": "kind", "type": "uint8" }, { "internalType": "uint8", "name": "mintCount", "type": "uint8" } ], "internalType": "struct RichCityV2NFT.TokenType", "name": "", "type": "tuple" } ], "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": "maxFirstMinted", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxOwnerMinted", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16[]", "name": "tokenIds", "type": "uint16[]" } ], "name": "migrateOldNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintByOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintFirst", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mintOldNFT", "outputs": [ { "components": [ { "internalType": "uint8", "name": "body", "type": "uint8" }, { "internalType": "uint8", "name": "clothes", "type": "uint8" }, { "internalType": "uint8", "name": "hair", "type": "uint8" }, { "internalType": "uint8", "name": "jewelry", "type": "uint8" }, { "internalType": "uint8", "name": "tatto", "type": "uint8" }, { "internalType": "uint8", "name": "belt", "type": "uint8" }, { "internalType": "uint8", "name": "sunglass", "type": "uint8" }, { "internalType": "uint8", "name": "hat", "type": "uint8" }, { "internalType": "uint8", "name": "mask", "type": "uint8" }, { "internalType": "uint8", "name": "weapon", "type": "uint8" } ], "internalType": "struct RichCityV2NFT.TokenTrait", "name": "t1", "type": "tuple" }, { "components": [ { "internalType": "uint8", "name": "gen", "type": "uint8" }, { "internalType": "uint8", "name": "level", "type": "uint8" }, { "internalType": "uint8", "name": "kind", "type": "uint8" }, { "internalType": "uint8", "name": "mintCount", "type": "uint8" } ], "internalType": "struct RichCityV2NFT.TokenType", "name": "t2", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "evaId", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "mintPublic", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "evaId", "type": "uint256" } ], "name": "mintPublicCost", "outputs": [ { "internalType": "uint256", "name": "cost1", "type": "uint256" }, { "internalType": "uint256", "name": "cost2", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minted", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "from", "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": [], "name": "ownerMinted", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "randomSource", "outputs": [ { "internalType": "contract IRandomSource", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "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": "bool", "name": "_paused", "type": "bool" } ], "name": "setPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_randomSource", "type": "address" } ], "name": "setRandomSource", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "setRichcityNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ITraits", "name": "addr", "type": "address" } ], "name": "setTraits", "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": [ { "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": "", "type": "uint256" } ], "name": "tokenTraits", "outputs": [ { "internalType": "uint8", "name": "body", "type": "uint8" }, { "internalType": "uint8", "name": "clothes", "type": "uint8" }, { "internalType": "uint8", "name": "hair", "type": "uint8" }, { "internalType": "uint8", "name": "jewelry", "type": "uint8" }, { "internalType": "uint8", "name": "tatto", "type": "uint8" }, { "internalType": "uint8", "name": "belt", "type": "uint8" }, { "internalType": "uint8", "name": "sunglass", "type": "uint8" }, { "internalType": "uint8", "name": "hat", "type": "uint8" }, { "internalType": "uint8", "name": "mask", "type": "uint8" }, { "internalType": "uint8", "name": "weapon", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenTypes", "outputs": [ { "internalType": "uint8", "name": "gen", "type": "uint8" }, { "internalType": "uint8", "name": "level", "type": "uint8" }, { "internalType": "uint8", "name": "kind", "type": "uint8" }, { "internalType": "uint8", "name": "mintCount", "type": "uint8" } ], "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": [], "name": "traits", "outputs": [ { "internalType": "contract ITraits", "name": "", "type": "address" } ], "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": "uint16[]", "name": "tokenIds", "type": "uint16[]" } ], "name": "upgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "upgradeCost", "outputs": [ { "internalType": "uint256", "name": "cost", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_buyersOne", "type": "address[]" }, { "internalType": "address[]", "name": "_buyersTwo", "type": "address[]" } ], "name": "whiteListBuyers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whiteListedOne", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whiteListedTwo", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whiteMinted", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "whiteOneMaxMinted", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "whiteTwoMaxMinted", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "_token", "type": "address" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60c06040526064600b556017805460ff60a01b191690553480156200002357600080fd5b5060405162005e6338038062005e63833981016040819052620000469162000234565b604080518082018252600e81526d5269636820436974792047616d6560901b60208083019182528351808501909452600384526252434760e81b90840152815191929162000097916000916200018e565b508051620000ad9060019060208401906200018e565b5050600a80546001600160a01b031916339081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600a805460ff60a01b19169055601480546001600160a01b03199081166001600160a01b039a8b1617909155601280548216988a169890981790975560138054881696891696909617909555601580548716948816949094179093556016805486169287169290921790915560178054909416941693909317909155606091821b6001600160601b0319908116608052911b1660a0526200034a565b8280546200019c90620002f4565b90600052602060002090601f016020900481019282620001c057600085556200020b565b82601f10620001db57805160ff19168380011785556200020b565b828001600101855582156200020b579182015b828111156200020b578251825591602001919060010190620001ee565b50620002199291506200021d565b5090565b5b808211156200021957600081556001016200021e565b600080600080600080600080610100898b03121562000251578384fd5b88516200025e8162000331565b60208a0151909850620002718162000331565b60408a0151909750620002848162000331565b60608a0151909650620002978162000331565b60808a0151909550620002aa8162000331565b60a08a0151909450620002bd8162000331565b60c08a0151909350620002d08162000331565b60e08a0151909250620002e38162000331565b809150509295985092959890939650565b600181811c908216806200030957607f821691505b602082108114156200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03811681146200034757600080fd5b50565b60805160601c60a05160601c615aca6200039960003960008181610676015281816119c70152818161425501526142d901526000818161072b0152818161420601526142900152615aca6000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c80636f4f7366116101de578063c8a1b57f1161010f578063e38aa70d116100ad578063f22801ad1161007c578063f22801ad14610964578063f2fde38b14610987578063f3e4df061461099a578063fc90ff42146109ad57600080fd5b8063e38aa70d146108f2578063e3c3777e146107fd578063e985e9c514610915578063ed5ab3f61461095157600080fd5b8063d95159b5116100e9578063d95159b5146107f5578063d97b934e146107fd578063e05c57bf14610806578063e1fc334f146108df57600080fd5b8063c8a1b57f146107ac578063cee1e955146107cf578063d773826d146107e257600080fd5b806395d89b411161017c578063b88d4fde11610156578063b88d4fde14610760578063c496981514610773578063c7076f4614610786578063c87b56dd1461079957600080fd5b806395d89b411461071e578063a017994914610726578063a22cb4651461074d57600080fd5b806389a30271116101b857806389a30271146106c65780638da5cb5b146106d95780638dd2bdc5146106ea57806394e56847146106fd57600080fd5b80636f4f73661461069857806370a08231146106ab578063715018a6146106be57600080fd5b80632f745c59116102c35780634f02c420116102615780635c975abb116102305780635c975abb14610643578063611f3f10146106555780636352211e1461065e5780636d736fac1461067157600080fd5b80634f02c420146105d05780634f6ccce7146105f557806351cff8d914610608578063552ec6d51461061b57600080fd5b806333f6832a1161029d57806333f6832a1461053e5780633b46cd7d1461052357806341d6df32146105aa57806342842e0e146105bd57600080fd5b80632f745c591461051057806331c06f531461052357806333a2cc5b1461052b57600080fd5b806316c38b3c116103305780631e48056d1161030a5780631e48056d146104b257806323b872dd146104d757806328d529cd146104ea5780632a944b19146104fd57600080fd5b806316c38b3c1461047757806318160ddd1461048a5780631943cdc91461049c57600080fd5b8063095ea7b31161036c578063095ea7b3146103fb5780630bf7a627146104105780630c89b76614610438578063150b7a021461044b57600080fd5b806301ffc9a71461039357806306fdde03146103bb578063081812fc146103d0575b600080fd5b6103a66103a1366004615139565b6109c0565b60405190151581526020015b60405180910390f35b6103c36109eb565b6040516103b29190615411565b6103e36103de3660046152fa565b610a7d565b6040516001600160a01b0390911681526020016103b2565b61040e610409366004615005565b610b17565b005b600c5461042590600160301b900461ffff1681565b60405161ffff90911681526020016103b2565b6016546103e3906001600160a01b031681565b61045e610459366004614e97565b610c2d565b6040516001600160e01b031990911681526020016103b2565b61040e610485366004615101565b610ca4565b6008545b6040519081526020016103b2565b600c5461042590640100000000900461ffff1681565b6104c56104c036600461532a565b610ce7565b60405160ff90911681526020016103b2565b61040e6104e5366004614e57565b610e44565b61040e6104f8366004615030565b610e75565b61040e61050b3660046152fa565b610f8c565b61048e61051e366004615005565b611164565b6104c5600a81565b61040e6105393660046152fa565b6111fa565b61057d61054c3660046152fa565b60116020526000908152604090205460ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016103b2565b61040e6105b8366004615091565b6116de565b61040e6105cb366004614e57565b611ead565b600c546105e09063ffffffff1681565b60405163ffffffff90911681526020016103b2565b61048e6106033660046152fa565b611ec8565b61040e610616366004614de7565b611f69565b61062e6106293660046152fa565b612096565b604080519283526020830191909152016103b2565b600a54600160a01b900460ff166103a6565b61048e600b5481565b6103e361066c3660046152fa565b6120fe565b6103e37f000000000000000000000000000000000000000000000000000000000000000081565b61040e6106a6366004614de7565b612175565b61048e6106b9366004614de7565b6121c1565b61040e612248565b6014546103e3906001600160a01b031681565b600a546001600160a01b03166103e3565b6013546103e3906001600160a01b031681565b61071061070b3660046152fa565b6122bc565b6040516103b292919061554d565b6103c36123c0565b6103e37f000000000000000000000000000000000000000000000000000000000000000081565b61040e61075b366004614fd8565b6123cf565b61040e61076e366004614f31565b612494565b6012546103e3906001600160a01b031681565b61040e610794366004614de7565b6124cc565b6103c36107a73660046152fa565b612518565b6103a66107ba366004614de7565b600e6020526000908152604090205460ff1681565b6017546103e3906001600160a01b031681565b61040e6107f0366004614de7565b612609565b610710612655565b6104256105dc81565b6108826108143660046152fa565b60106020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204811691600160281b8104821691600160301b8204811691600160381b8104821691600160401b8204811691600160481b9004168a565b6040805160ff9b8c168152998b1660208b0152978a16978901979097529488166060880152928716608087015290861660a0860152851660c0850152841660e08401528316610100830152909116610120820152610140016103b2565b6015546103e3906001600160a01b031681565b6103a6610900366004614de7565b600d6020526000908152604090205460ff1681565b6103a6610923366004614e1f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61040e61095f36600461532a565b6129e5565b6104c5610972366004614de7565b600f6020526000908152604090205460ff1681565b61040e610995366004614de7565b612de3565b61048e6109a83660046152fa565b612ece565b61040e6109bb366004615091565b612fcb565b60006001600160e01b0319821663780e9d6360e01b14806109e557506109e582613341565b92915050565b6060600080546109fa90615918565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690615918565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610afb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610b22826120fe565b9050806001600160a01b0316836001600160a01b03161415610b905760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610af2565b336001600160a01b0382161480610bac5750610bac8133610923565b610c1e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610af2565b610c288383613391565b505050565b60006001600160a01b03851615610c925760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742073656e6420746f6b656e7320746f204261726e206469726563604482015262746c7960e81b6064820152608401610af2565b50630a85bd0160e11b95945050505050565b600a546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610af2906154c7565b8015610cdf57610cdc6133ff565b50565b610cdc613481565b60008281526011602052604081205461ffff9092169160ff6201000090910416600181148015610d2e5750600084815260116020526040902054600461010090910460ff16105b15610d90576052610d406064856159e5565b1015610d4f5760019150610e3d565b6057610d5c6064856159e5565b1015610d6b5760049150610e3d565b605a610d786064856159e5565b1015610d875760029150610e3d565b60039150610e3d565b8060021415610de4576102ee610da86103e8856159e5565b1015610db75760019150610e3d565b610339610dc66103e8856159e5565b1015610dd55760049150610e3d565b610366610d786103e8856159e5565b6041610df16064856159e5565b1015610e005760019150610e3d565b604b610e0d6064856159e5565b1015610e1c5760049150610e3d565b6052610e296064856159e5565b1015610e385760029150610e3d565b600391505b5092915050565b610e4e3382613505565b610e6a5760405162461bcd60e51b8152600401610af2906154fc565b610c288383836135fc565b600a546001600160a01b03163314610e9f5760405162461bcd60e51b8152600401610af2906154c7565b60005b8251811015610f15576001600d6000858481518110610ed157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f0d8161596f565b915050610ea2565b5060005b8151811015610c28576001600e6000848481518110610f4857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f848161596f565b915050610f19565b600a546001600160a01b03163314610fb65760405162461bcd60e51b8152600401610af2906154c7565b600c546105dc600160301b90910461ffff1611156110065760405162461bcd60e51b815260206004820152600d60248201526c115e18d9595908185b5bdd5b9d609a1b6044820152606401610af2565b6000805b82811015610c2857600c8054600160301b900461ffff1690600661102d8361594d565b825461ffff9182166101009390930a928302919092021990911617905550600c805463ffffffff169060006110618361598a565b82546101009290920a63ffffffff818102199093169183160217909155600c5461108c9250166137a7565b601654600c54604051634155c48560e11b815263ffffffff909116831860048201529193506001600160a01b0316906382ab890a90602401600060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b5050600c5461110a925063ffffffff16905083613882565b5050600c5461112090339063ffffffff16613af8565b600c54604051600080516020615a758339815191529161114a91339163ffffffff169042906153ea565b60405180910390a18061115c8161596f565b91505061100a565b600061116f836121c1565b82106111d15760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610af2565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b601754600160a01b900460ff16156112245760405162461bcd60e51b8152600401610af290615476565b6017805460ff60a01b1916600160a01b17905561124b600a5460ff600160a01b9091041690565b156112685760405162461bcd60e51b8152600401610af29061549d565b3233146112a25760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610af2565b6000811180156112b3575060038111155b6112f55760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610af2565b600c546105dc64010000000090910461ffff1611156113465760405162461bcd60e51b815260206004820152600d60248201526c115e18d9595908185b5bdd5b9d609a1b6044820152606401610af2565b336000908152600d602052604090205460ff16806113735750336000908152600e602052604090205460ff165b6113ae5760405162461bcd60e51b815260206004820152600c60248201526b139bc815da1a5d195b1a5cdd60a21b6044820152606401610af2565b336000908152600e602052604090205460ff1680156113dc5750336000908152600d602052604090205460ff165b1561144d57336000908152600f6020526040902054600a9061140290839060ff166156ea565b11156114485760405162461bcd60e51b81526020600482015260156024820152744578636565642050757263686173652054696d657360581b6044820152606401610af2565b6114ed565b336000908152600e602052604090205460ff161561148657336000908152600f6020526040902054600a9061140290839060ff166156ea565b336000908152600f6020526040902054600a906114a790839060ff166156ea565b11156114ed5760405162461bcd60e51b81526020600482015260156024820152744578636565642050757263686173652054696d657360581b6044820152606401610af2565b600080805b8381101561169f57600c8054640100000000900461ffff169060046115168361594d565b825461ffff9182166101009390930a928302919092021990911617905550600c805463ffffffff1690600061154a8361598a565b825463ffffffff9182166101009390930a928302919092021990911617905550336000908152600f60205260408120805460ff1691611588836159a4565b825460ff9182166101009390930a928302919092021990911617905550600c546115b79063ffffffff166137a7565b601654600c54604051634155c48560e11b815263ffffffff909116831860048201529193506001600160a01b0316906382ab890a90602401600060405180830381600087803b15801561160957600080fd5b505af115801561161d573d6000803e3d6000fd5b5050600c54611635925063ffffffff16905083613882565b5050600b5461164490846156ea565b600c5490935061165b90339063ffffffff16613af8565b600c54604051600080516020615a758339815191529161168591339163ffffffff169042906153ea565b60405180910390a1806116978161596f565b9150506114f2565b5081156116cc576116cc33306116b885620f4240613b12565b6014546001600160a01b0316929190613b98565b50506017805460ff60a01b1916905550565b601754600160a01b900460ff16156117085760405162461bcd60e51b8152600401610af290615476565b6017805460ff60a01b1916600160a01b17905561172f600a5460ff600160a01b9091041690565b1561174c5760405162461bcd60e51b8152600401610af29061549d565b3233146117865760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610af2565b60005b818110156116cc5760175433906001600160a01b0316636352211e8585858181106117c457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117d991906152d8565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b15801561181357600080fd5b505afa158015611827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184b9190614e03565b6001600160a01b03161461188d5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610af2565b6017546001600160a01b03166323b872dd33308686868181106118c057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118d591906152d8565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b5050505060006103e984848481811061196557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061197a91906152d8565b6119849190615727565b61198f9060016156c4565b6119a59061ffff16670de0b6b3a7640000615861565b60135467ffffffffffffffff9190911691506119ec906001600160a01b0316337f000000000000000000000000000000000000000000000000000000000000000084613b98565b6000611a2f858585818110611a1157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a2691906152d8565b61ffff166137a7565b90506004611a436103e861ffff84166159c4565b61ffff161115611e9857600c805463ffffffff16906000611a638361598a565b825463ffffffff9182166101009390930a9283029190920219909116179055506017546000906001600160a01b03166394e56847878787818110611ab757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611acc91906152d8565b6040516001600160e01b031960e084901b16815261ffff90911660048201526024016101a06040518083038186803b158015611b0757600080fd5b505afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f91906151db565b90506040518060800160405280600060ff168152602001826040015160ff1681526020018260000151611b73576002611b76565b60015b60ff168152602001600060ff1681525060116000600c60009054906101000a900463ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff160217905550905050604051806101400160405280826020015160ff168152602001826060015160ff168152602001826080015160ff1681526020018260a0015160ff1681526020018260c0015160ff1681526020018260e0015160ff16815260200182610100015160ff16815260200182610120015160ff16815260200182610140015160ff16815260200182610160015160ff1681525060106000600c60009054906101000a900463ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055506101208201518160000160096101000a81548160ff021916908360ff160217905550905050611e6433600c60009054906101000a900463ffffffff1663ffffffff16613af8565b600c54604051600080516020615a7583398151915291611e8e91339163ffffffff169042906153ea565b60405180910390a1505b50508080611ea59061596f565b915050611789565b610c2883838360405180602001604052806000815250612494565b6000611ed360085490565b8210611f365760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610af2565b60088281548110611f5757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03163314611f935760405162461bcd60e51b8152600401610af2906154c7565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b158015611fdc57600080fd5b505afa158015611ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120149190615312565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561205a57600080fd5b505af115801561206e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612092919061511d565b5050565b60008181526011602052604081205481906301000000900460ff1660018114156120c75760149150602892506120f8565b6120d26001826158b2565b6120dd906028615842565b91506120ea6001826158b2565b6120f5906050615842565b92505b50915091565b6000818152600260205260408120546001600160a01b0316806109e55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610af2565b600a546001600160a01b0316331461219f5760405162461bcd60e51b8152600401610af2906154c7565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b03821661222c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610af2565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146122725760405162461bcd60e51b8152600401610af2906154c7565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b6122c4614ce6565b506040805160808082018352600080835260208084018290528385018290526060938401829052948152601085528381206011865290849020845161014081018652915460ff80821684526101008083048216858a0152620100008084048316868a015263010000008085048416878a01526401000000008504841687890152600160281b8504841660a0880152600160301b8504841660c0880152600160381b8504841660e0880152600160401b8504841683880152600160481b9094048316610120870152885196870189529354808316875290810482169886019890985291870482169584019590955293909404909216908201529091565b6060600180546109fa90615918565b6001600160a01b0382163314156124285760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610af2565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61249e3383613505565b6124ba5760405162461bcd60e51b8152600401610af2906154fc565b6124c684848484613bf2565b50505050565b600a546001600160a01b031633146124f65760405162461bcd60e51b8152600401610af2906154c7565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260409020546060906001600160a01b03166125895760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a206e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610af2565b60155460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd9060240160006040518083038186803b1580156125cd57600080fd5b505afa1580156125e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109e59190810190615171565b600a546001600160a01b031633146126335760405162461bcd60e51b8152600401610af2906154c7565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b61265d614ce6565b604080516080810182526000808252602082018190529181018290526060810191909152600a546001600160a01b031633146126ab5760405162461bcd60e51b8152600401610af2906154c7565b601754600160a01b900460ff16156126d55760405162461bcd60e51b8152600401610af290615476565b6017805460ff60a01b1916600160a01b1790556126fc600a5460ff600160a01b9091041690565b156127195760405162461bcd60e51b8152600401610af29061549d565b600c805463ffffffff1690600061272f8361598a565b82546101009290920a63ffffffff818102199093169183160217909155600c546000925061275d91166137a7565b6000835290506127716001808316906156c4565b60ff908116604080850191825260016020808701918252600060608801818152600c5463ffffffff168252601190925292832087518154935195519251871663010000000263ff0000001993881662010000029390931663ffff0000199688166101000261ffff199095169190971617929092179390931693909317919091179091556127ff908290613c25565b50809350508260106000600c60009054906101000a900463ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055506101208201518160000160096101000a81548160ff021916908360ff1602179055509050506129a133600c60009054906101000a900463ffffffff1663ffffffff16613af8565b600c54604051600080516020615a75833981519152916129cb91339163ffffffff169042906153ea565b60405180910390a1506017805460ff60a01b191690559091565b601754600160a01b900460ff1615612a0f5760405162461bcd60e51b8152600401610af290615476565b6017805460ff60a01b1916600160a01b179055612a36600a5460ff600160a01b9091041690565b15612a535760405162461bcd60e51b8152600401610af29061549d565b33612a5d836120fe565b6001600160a01b0316148015612a83575033612a78826120fe565b6001600160a01b0316145b612a8c57600080fd5b6000828152601160208181526040808420815160808082018452915460ff808216835261010080830482168488015262010000808404831685880190815263010000009485900484166060808801919091528c8c52998952998790208751968701885254808416875291820483169786019790975295860481169484019490945290930482169381019390935292519092166003148015612b355750806040015160ff16600314155b612b3e57600080fd5b6007826060015160ff16108015612b5c57506007816060015160ff16105b612b9a5760405162461bcd60e51b815260206004820152600f60248201526e4f766572206d696e742074696d657360881b6044820152606401610af2565b6003826020015160ff161015612baf57600080fd5b806040015160ff1660021415612bd4576002816020015160ff161015612bd457600080fd5b806040015160ff1660011415612bf9576003816020015160ff161015612bf957600080fd5b600c805463ffffffff16906000612c0f8361598a565b825463ffffffff9182166101009390930a9283029190920219909116179055506000848152601160205260409020805460ff630100000090910416906003612c56836159a4565b82546101009290920a60ff818102199093169183160217909155600085815260116020526040902080546301000000900490911691506003612c97836159a4565b825460ff9182166101009390930a928302919092021990911617905550600c54600090612cc99063ffffffff166137a7565b601654600c54604051634155c48560e11b815263ffffffff909116831860048201529192506001600160a01b0316906382ab890a90602401600060405180830381600087803b158015612d1b57600080fd5b505af1158015612d2f573d6000803e3d6000fd5b50505050600080612d3f87612096565b600c549193509150612d589063ffffffff168488613f93565b5050600c54612d6e90339063ffffffff16613af8565b612d9b33612d8483670de0b6b3a7640000615842565b612d9685670de0b6b3a7640000615842565b6141fa565b600c54604051600080516020615a7583398151915291612dc591339163ffffffff169042906153ea565b60405180910390a150506017805460ff60a01b191690555050505050565b600a546001600160a01b03163314612e0d5760405162461bcd60e51b8152600401610af2906154c7565b6001600160a01b038116612e725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af2565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526011602090815260408083208151608081018352905460ff80821683526101008204811694830194909452620100008104841692820183905263010000009004909216606083015260021415612f4957806020015160ff16600114612f3a57610a8c612f3e565b6103845b61ffff169150612fb1565b806040015160ff1660011415612f875760018160200151612f6a91906158c9565b612f75906003615797565b612f80906064615842565b9150612fb1565b60018160200151612f9891906158c9565b612fa3906003615797565b612fae906014615842565b91505b6005816020015160ff1610612fc557600091505b50919050565b60005b81811015610c285733613018848484818110612ffa57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061300f91906152d8565b61ffff166120fe565b6001600160a01b03161461302b57600080fd5b60006011600085858581811061305157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061306691906152d8565b61ffff1681526020810191909152604001600020805490915060ff62010000909104166002148015906130a357508054600561010090910460ff16105b806130b857508054600361010090910460ff16105b6130f05760405162461bcd60e51b815260206004820152600960248201526813585e0813195d995b60ba1b6044820152606401610af2565b805462010000900460ff16600114801561311357508054610100900460ff166003145b156131725761316f84848481811061313b57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061315091906152d8565b600c5461ffff919091169061316a9063ffffffff166137a7565b613882565b50505b60006131b585858581811061319757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906131ac91906152d8565b61ffff16612ece565b8254909150610100900460ff168260016131ce836159a4565b91906101000a81548160ff021916908360ff160217905550508160000160029054906101000a900460ff1660ff1660031415613226576132213361321a83670de0b6b3a7640000615842565b60006141fa565b6132a9565b6012546001600160a01b03166379cc67903361324a84670de0b6b3a7640000615842565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561329057600080fd5b505af11580156132a4573d6000803e3d6000fd5b505050505b7fcf1698724fdb9aa71dd00ba4fa8933d7209eeb372d14c3a8892b64612b32bd1b338686868181106132eb57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061330091906152d8565b604080516001600160a01b03909316835261ffff9091166020830152429082015260600160405180910390a1505080806133399061596f565b915050612fce565b60006001600160e01b031982166380ac58cd60e01b148061337257506001600160e01b03198216635b5e139f60e01b145b806109e557506301ffc9a760e01b6001600160e01b03198316146109e5565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906133c6826120fe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600a54600160a01b900460ff16156134295760405162461bcd60e51b8152600401610af29061549d565b600a805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586134643390565b6040516001600160a01b03909116815260200160405180910390a1565b600a54600160a01b900460ff166134d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610af2565b600a805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613464565b6000818152600260205260408120546001600160a01b031661357e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610af2565b6000613589836120fe565b9050806001600160a01b0316846001600160a01b031614806135c45750836001600160a01b03166135b984610a7d565b6001600160a01b0316145b806135f457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661360f826120fe565b6001600160a01b0316146136775760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610af2565b6001600160a01b0382166136d95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610af2565b6136e4838383614308565b6136ef600082613391565b6001600160a01b03831660009081526003602052604081208054600192906137189084906158b2565b90915550506001600160a01b03821660009081526003602052604081208054600192906137469084906156ea565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60165460408051633eca3c9560e11b815290516000926001600160a01b031691637d94792a916004808301926020929190829003018186803b1580156137ec57600080fd5b505afa158015613800573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138249190615312565b326138306001436158b2565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074810184905260940160408051601f1981840301815291905280516020909101201892915050565b61388a614ce6565b60408051608081018252600080825260208201819052918101829052606081019190915260008481526011602052604090205462010000900460ff16600114156138df576138d884846143c0565b9150613af1565b6138ea836001613c25565b8092508193505050816010600086815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055506101208201518160000160096101000a81548160ff021916908360ff160217905550905050806011600086815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff1602179055509050505b9250929050565b61209282826040518060200160405280600081525061455a565b600082613b21575060006109e5565b6000613b2d8385615842565b905082613b3a8583615748565b14613b915760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610af2565b9392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526124c690859061458d565b613bfd8484846135fc565b613c098484848461465f565b6124c65760405162461bcd60e51b8152600401610af290615424565b613c2d614ce6565b6040805160808101825260008082526020820181905291810182905260608101919091528215613c7457600080825260036040830152600160208301526060820152613c9c565b600c5463ffffffff16600090815260116020526040908190205462010000900460ff16908201525b60008160400151600a613caf9190615891565b9050816040015160ff166001148015613ccf57506003826020015160ff16115b15613cd8575060285b601085901c9450816040015160ff166001148015613cfe57506003826020015160ff1611155b15613dad57613d1b61ffff8616613d16836005615702565b61476c565b60ff16835260109490941c93613d3a61ffff8616613d16836006615702565b60ff16602084015260109490941c93613d5c61ffff8616613d16836008615702565b60ff16604084015260109490941c93613d7e61ffff8616613d16836009615702565b60ff16606084015260109490941c93613da061ffff8616613d1683600a615702565b60ff166080840152613f8b565b816040015160ff1660021415613e6457613dd061ffff8616613d16836005615702565b60ff16835260109490941c93613def61ffff8616613d16836006615702565b60ff16602084015260109490941c93613e1161ffff8616613d16836008615702565b60ff1661010084015260109490941c93613e3461ffff8616613d16836009615702565b60ff1661012084015260109490941c93613e5761ffff8616613d1683600a615702565b60ff1660e0840152613f8b565b816040015160ff1660031415613eea57613e8761ffff8616613d16836005615702565b60ff16835260109490941c93613ea661ffff8616613d16836008615702565b60ff16606084015260109490941c93613ec861ffff8616613d16836009615702565b60ff16604084015260109490941c93613da061ffff8616613d1683600a615702565b613efd61ffff8616613d16836005615702565b60ff16835260109490941c93613f1c61ffff8616613d16836006615702565b60ff16602084015260109490941c93613f3e61ffff8616613d16836008615702565b60ff1660a084015260109490941c93613f6061ffff8616613d16836009615702565b60ff16604084015260109490941c93613f8261ffff8616613d1683600a615702565b60ff1660c08401525b509250929050565b613f9b614ce6565b6040805160808101825260008082526020820181905291810182905260608101919091526000838152601160205260408120546301000000900460ff168252613fe48486610ce7565b60ff81166040840181905260016020850152909150600414156140105760016040830152600460208301525b600060608301818152878252601160209081526040808420865181549388015192880151945160ff91821661ffff1990951694909417610100938216939093029290921763ffff00001916620100009483169490940263ff00000019169390931763010000009190921602179055614089908690613c25565b5080935050826010600088815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055506101008201518160000160086101000a81548160ff021916908360ff1602179055506101208201518160000160096101000a81548160ff021916908360ff16021790555090505050935093915050565b81156142845761424f837f000000000000000000000000000000000000000000000000000000000000000061423b600a614235876007613b12565b906147f5565b6013546001600160a01b0316929190613b98565b614284837f000000000000000000000000000000000000000000000000000000000000000061423b600a614235876003613b12565b8015610c28576142d3837f00000000000000000000000000000000000000000000000000000000000000006142bf600a614235866007613b12565b6012546001600160a01b0316929190613b98565b610c28837f00000000000000000000000000000000000000000000000000000000000000006142bf600a614235866003613b12565b6001600160a01b0383166143635761435e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b614386565b816001600160a01b0316836001600160a01b031614614386576143868382614837565b6001600160a01b03821661439d57610c28816148d4565b826001600160a01b0316826001600160a01b031614610c2857610c2882826149ad565b6143c8614ce6565b6000838152601060205260409020805464ffff000000191681556143f161ffff8416602d61476c565b815460ff191660ff9190911617815560109290921c9161441661ffff8416602e61476c565b815460ff919091166101000261ff001990911617815560109290921c9161444261ffff8416603161476c565b815460ff91909116600160281b0265ff00000000001990911617815560109290921c9161447461ffff8416603061476c565b815460ff91909116620100000262ff00001990911617815560109290921c916144a261ffff8416603261476c565b815466ff000000000000198116600160301b60ff9384168102918217948590556040805161014081018252938516928516929092178352610100808604851660208501526201000086048516928401929092526301000000850484166060840152640100000000850484166080840152600160281b8504841660a08401528404831660c0830152600160381b8404831660e0830152600160401b8404831690820152600160481b909204166101208201529392505050565b61456483836149f1565b614571600084848461465f565b610c285760405162461bcd60e51b8152600401610af290615424565b60006145e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614b3f9092919063ffffffff16565b805190915015610c285780806020019051810190614600919061511d565b610c285760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610af2565b60006001600160a01b0384163b1561476157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906146a39033908990889088906004016153ad565b602060405180830381600087803b1580156146bd57600080fd5b505af19250505080156146ed575060408051601f3d908101601f191682019092526146ea91810190615155565b60015b614747573d80801561471b576040519150601f19603f3d011682016040523d82523d6000602084013e614720565b606091505b50805161473f5760405162461bcd60e51b8152600401610af290615424565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506135f4565b506001949350505050565b6015546040516353584b4960e11b815261ffff8416600482015260ff831660248201526000916001600160a01b03169063a6b096929060440160206040518083038186803b1580156147bd57600080fd5b505afa1580156147d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b91919061534b565b6000613b9183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b4e565b60006001614844846121c1565b61484e91906158b2565b6000838152600760205260409020549091508082146148a1576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906148e6906001906158b2565b6000838152600960205260408120546008805493945090928490811061491c57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061494b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061499157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006149b8836121c1565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216614a475760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610af2565b6000818152600260205260409020546001600160a01b031615614aac5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610af2565b614ab860008383614308565b6001600160a01b0382166000908152600360205260408120805460019290614ae19084906156ea565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60606135f48484600085614b85565b60008183614b6f5760405162461bcd60e51b8152600401610af29190615411565b506000614b7c8486615748565b95945050505050565b606082471015614be65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610af2565b843b614c345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610af2565b600080866001600160a01b03168587604051614c509190615391565b60006040518083038185875af1925050503d8060008114614c8d576040519150601f19603f3d011682016040523d82523d6000602084013e614c92565b606091505b5091509150614ca2828286614cad565b979650505050505050565b60608315614cbc575081613b91565b825115614ccc5782518084602001fd5b8160405162461bcd60e51b8152600401610af29190615411565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915290565b600082601f830112614d4a578081fd5b8135602067ffffffffffffffff821115614d6657614d66615a25565b8160051b614d7582820161566b565b838152828101908684018388018501891015614d8f578687fd5b8693505b85841015614dba578035614da681615a3b565b835260019390930192918401918401614d93565b50979650505050505050565b8051614dd181615a50565b919050565b805160ff81168114614dd157600080fd5b600060208284031215614df8578081fd5b8135613b9181615a3b565b600060208284031215614e14578081fd5b8151613b9181615a3b565b60008060408385031215614e31578081fd5b8235614e3c81615a3b565b91506020830135614e4c81615a3b565b809150509250929050565b600080600060608486031215614e6b578081fd5b8335614e7681615a3b565b92506020840135614e8681615a3b565b929592945050506040919091013590565b600080600080600060808688031215614eae578283fd5b8535614eb981615a3b565b94506020860135614ec981615a3b565b935060408601359250606086013567ffffffffffffffff80821115614eec578283fd5b818801915088601f830112614eff578283fd5b813581811115614f0d578384fd5b896020828501011115614f1e578384fd5b9699959850939650602001949392505050565b60008060008060808587031215614f46578182fd5b8435614f5181615a3b565b93506020850135614f6181615a3b565b925060408501359150606085013567ffffffffffffffff811115614f83578182fd5b8501601f81018713614f93578182fd5b8035614fa6614fa18261569c565b61566b565b818152886020838501011115614fba578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215614fea578182fd5b8235614ff581615a3b565b91506020830135614e4c81615a50565b60008060408385031215615017578182fd5b823561502281615a3b565b946020939093013593505050565b60008060408385031215615042578182fd5b823567ffffffffffffffff80821115615059578384fd5b61506586838701614d3a565b9350602085013591508082111561507a578283fd5b5061508785828601614d3a565b9150509250929050565b600080602083850312156150a3578182fd5b823567ffffffffffffffff808211156150ba578384fd5b818501915085601f8301126150cd578384fd5b8135818111156150db578485fd5b8660208260051b85010111156150ef578485fd5b60209290920196919550909350505050565b600060208284031215615112578081fd5b8135613b9181615a50565b60006020828403121561512e578081fd5b8151613b9181615a50565b60006020828403121561514a578081fd5b8135613b9181615a5e565b600060208284031215615166578081fd5b8151613b9181615a5e565b600060208284031215615182578081fd5b815167ffffffffffffffff811115615198578182fd5b8201601f810184136151a8578182fd5b80516151b6614fa18261569c565b8181528560208385010111156151ca578384fd5b614b7c8260208301602086016158ec565b60006101a082840312156151ed578081fd5b6151f5615641565b6151fe83614dc6565b815261520c60208401614dd6565b602082015261521d60408401614dd6565b604082015261522e60608401614dd6565b606082015261523f60808401614dd6565b608082015261525060a08401614dd6565b60a082015261526160c08401614dd6565b60c082015261527260e08401614dd6565b60e0820152610100615285818501614dd6565b90820152610120615297848201614dd6565b908201526101406152a9848201614dd6565b908201526101606152bb848201614dd6565b908201526101806152cd848201614dd6565b908201529392505050565b6000602082840312156152e9578081fd5b813561ffff81168114613b91578182fd5b60006020828403121561530b578081fd5b5035919050565b600060208284031215615323578081fd5b5051919050565b6000806040838503121561533c578182fd5b50508035926020909101359150565b60006020828403121561535c578081fd5b613b9182614dd6565b6000815180845261537d8160208601602086016158ec565b601f01601f19169290920160200192915050565b600082516153a38184602087016158ec565b9190910192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906153e090830184615365565b9695505050505050565b6001600160a01b0393909316835263ffffffff919091166020830152604082015260600190565b602081526000613b916020830184615365565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252600d908201526c4e6f207265656e7472616e637960981b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b825160ff1681526101c08101602084015161556d602084018260ff169052565b506040840151615582604084018260ff169052565b506060840151615597606084018260ff169052565b5060808401516155ac608084018260ff169052565b5060a08401516155c160a084018260ff169052565b5060c08401516155d660c084018260ff169052565b5060e08401516155eb60e084018260ff169052565b506101008481015160ff90811691840191909152610120808601518216908401528351811661014084015260208401518116610160840152604084015181166101808401526060840151166101a0830152613b91565b6040516101a0810167ffffffffffffffff8111828210171561566557615665615a25565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561569457615694615a25565b604052919050565b600067ffffffffffffffff8211156156b6576156b6615a25565b50601f01601f191660200190565b600061ffff8083168185168083038211156156e1576156e16159f9565b01949350505050565b600082198211156156fd576156fd6159f9565b500190565b600060ff821660ff84168060ff0382111561571f5761571f6159f9565b019392505050565b600061ffff8084168061573c5761573c615a0f565b92169190910492915050565b60008261575757615757615a0f565b500490565b600181815b80851115613f8b57816000190482111561577d5761577d6159f9565b8085161561578a57918102915b93841c9390800290615761565b6000613b9160ff8416836000826157b0575060016109e5565b816157bd575060006109e5565b81600181146157d357600281146157dd576157f9565b60019150506109e5565b60ff8411156157ee576157ee6159f9565b50506001821b6109e5565b5060208310610133831016604e8410600b841016171561581c575081810a6109e5565b615826838361575c565b806000190482111561583a5761583a6159f9565b029392505050565b600081600019048311821515161561585c5761585c6159f9565b500290565b600067ffffffffffffffff80831681851681830481118215151615615888576158886159f9565b02949350505050565b600060ff821660ff84168160ff048111821515161561583a5761583a6159f9565b6000828210156158c4576158c46159f9565b500390565b600060ff821660ff8416808210156158e3576158e36159f9565b90039392505050565b60005b838110156159075781810151838201526020016158ef565b838111156124c65750506000910152565b600181811c9082168061592c57607f821691505b60208210811415612fc557634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415615965576159656159f9565b6001019392505050565b6000600019821415615983576159836159f9565b5060010190565b600063ffffffff80831681811415615965576159656159f9565b600060ff821660ff8114156159bb576159bb6159f9565b60010192915050565b600061ffff808416806159d9576159d9615a0f565b92169190910692915050565b6000826159f4576159f4615a0f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610cdc57600080fd5b8015158114610cdc57600080fd5b6001600160e01b031981168114610cdc57600080fdfe96234cb3d6c373a1aaa06497a540bc166d4b0359243a088eaf95e21d7253d0bea2646970667358221220b8bd6d83867d6b6ef96756623f025c10af8e632090e95f1e78b1e9508c3d442664736f6c6343000804003300000000000000000000000045133595d6b99d8abcd81b1754b6da452e42a2bf000000000000000000000000cd694d2e680c6f8c97d2f3e7c574d2be02ecdec50000000000000000000000002afee730f6675275f3fa13563214ff13feb46b66000000000000000000000000b528248a9d6b840cb85bb75edb969894743bdae100000000000000000000000003be0a92528c4be6191afb0ddb5b112f43a15c91000000000000000000000000ba1ec7a2070ab5bf09e04bb89b0722337406be8e000000000000000000000000269b3ddccc6a78c5f5c00ad1701b45065ca6b6a30000000000000000000000002a2626530d65e60cfd199a2292342fcb06f7bb5e