[ { "inputs": [ { "internalType": "address", "name": "factory", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "string", "name": "promo", "type": "string" } ], "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": false, "internalType": "uint256", "name": "assetId", "type": "uint256" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "promo", "type": "string" }, { "internalType": "string[]", "name": "asset", "type": "string[]" }, { "internalType": "address", "name": "author", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "indexed": false, "internalType": "struct AssetStore.Asset", "name": "asset", "type": "tuple" } ], "name": "AssetAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assetId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "discount", "type": "uint256" } ], "name": "AssetDiscounted", "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": "artist", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "name": "RewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint8", "name": "state", "type": "uint8" } ], "name": "StateUpdated", "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" }, { "inputs": [], "name": "DISCOUNT_PERCENT", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REGISTER_PERCENT", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REWARD_PERCENT", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STATE_NORMAL", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STATE_READY", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STATE_SURPRISE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": "uint256", "name": "", "type": "uint256" } ], "name": "assets", "outputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "promo", "type": "string" }, { "internalType": "address", "name": "author", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "batchTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "to", "type": "address[]" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "batchTransfers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assetId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "buyItem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "claimDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "assetIds", "type": "uint256[]" } ], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "erc1155Token", "type": "address[]" }, { "internalType": "uint256[]", "name": "erc1155TokenId", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "erc1155TokenAmount", "type": "uint256[]" } ], "name": "depositERC1155", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "erc1155Token", "type": "address[]" }, { "internalType": "uint256[]", "name": "erc1155TokenId", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "erc1155TokenAmount", "type": "uint256[]" } ], "name": "depositERC1155AndWrap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "token", "type": "address[]" }, { "internalType": "uint256[]", "name": "amount", "type": "uint256[]" } ], "name": "depositERC20", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "token", "type": "address[]" }, { "internalType": "uint256[]", "name": "amount", "type": "uint256[]" } ], "name": "depositERC20AndWrap", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "erc721Token", "type": "address[]" }, { "internalType": "uint256[]", "name": "erc721TokenId", "type": "uint256[]" } ], "name": "depositERC721", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "erc721Token", "type": "address[]" }, { "internalType": "uint256[]", "name": "erc721TokenId", "type": "uint256[]" } ], "name": "depositERC721AndWrap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "discounts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "contract IUtilitybia", "name": "", "type": "address" } ], "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": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assetId", "type": "uint256" } ], "name": "isDiscount", "outputs": [ { "internalType": "bool", "name": "discounted", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "locked", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "mintWithDiscounts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "mints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "", "type": "address" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155BatchReceived", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "open", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "uint256", "name": "assetId", "type": "uint256" } ], "name": "price", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assetId", "type": "uint256" } ], "name": "priceOrigin", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "promo", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "promo", "type": "string" }, { "internalType": "string[]", "name": "asset", "type": "string[]" }, { "internalType": "uint256", "name": "price_", "type": "uint256" }, { "internalType": "uint256", "name": "limit_", "type": "uint256" } ], "name": "registerAsset", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assetId", "type": "uint256" }, { "internalType": "uint256", "name": "discount_", "type": "uint256" } ], "name": "registerDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assetId", "type": "uint256" } ], "name": "reward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "assetIds", "type": "uint256[]" } ], "name": "rewards", "outputs": [ { "internalType": "uint256", "name": "total", "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": "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": [], "name": "states", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "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": "", "type": "uint256" } ], "name": "tokenAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenState", "outputs": [ { "internalType": "uint8", "name": "", "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": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" } ], "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": "string", "name": "_promo", "type": "string" } ], "name": "updatePromo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "viewERC1155Ids", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct Vault.TkERC1155[]", "name": "amount", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "viewERC1155s", "outputs": [ { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "viewERC20Amount", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "viewERC20s", "outputs": [ { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "viewERC721Ids", "outputs": [ { "internalType": "uint256[]", "name": "amount", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "viewERC721s", "outputs": [ { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "viewETH", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "wrap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b50604051620052e0380380620052e0833981016040819052620000349162000298565b82816040518060400160405280601581526020017f5574696c697479626961202d204769667420426f7800000000000000000000008152506040518060400160405280600a8152602001690aaa8848ed2cce884def60b31b8152508560038084848160009080519060200190620000ad9291906200013f565b508051620000c39060019060208401906200013f565b50506007805460ff191660ff9390931692909217909155508151620000f090600e9060208501906200013f565b5050601880546001600160a01b0387166001600160a01b031991821617909155601980549091163317905550508151620001339150601a9060208401906200013f565b50505050505062000371565b8280546200014d906200031e565b90600052602060002090601f016020900481019282620001715760008555620001bc565b82601f106200018c57805160ff1916838001178555620001bc565b82800160010185558215620001bc579182015b82811115620001bc5782518255916020019190600101906200019f565b50620001ca929150620001ce565b5090565b5b80821115620001ca5760008155600101620001cf565b600082601f830112620001f6578081fd5b81516001600160401b03808211156200021357620002136200035b565b604051601f8301601f19908116603f011681019082821181831017156200023e576200023e6200035b565b816040528381526020925086838588010111156200025a578485fd5b8491505b838210156200027d57858201830151818301840152908201906200025e565b838211156200028e57848385830101525b9695505050505050565b600080600060608486031215620002ad578283fd5b83516001600160a01b0381168114620002c4578384fd5b60208501519093506001600160401b0380821115620002e1578384fd5b620002ef87838801620001e5565b9350604086015191508082111562000305578283fd5b506200031486828701620001e5565b9150509250925092565b600181811c908216806200033357607f821691505b602082108114156200035557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b614f5f80620003816000396000f3fe6080604052600436106103d25760003560e01c806382482f7c116101fd578063bbab2ede11610118578063dd9992a2116100ab578063f23a6e611161007a578063f23a6e6114610bd4578063f2fde38b14610c01578063f7087e0d14610c21578063f709c59d14610c4e578063fbad26b914610c6e57600080fd5b8063dd9992a214610b41578063de80b0a514610b56578063e985e9c514610b6b578063ea598cb014610bb457600080fd5b8063c8b3f3ac116100e7578063c8b3f3ac14610ac5578063cf30901214610ae5578063cf35bdd014610afb578063d2ae317014610b2c57600080fd5b8063bbab2ede14610a28578063bc197c8114610a3d578063c45a015514610a85578063c87b56dd14610aa557600080fd5b8063a39ce20c11610190578063adad78b01161015f578063adad78b01461098e578063b5d35423146109ae578063b88d4fde146109db578063bae6a690146109fb57600080fd5b8063a39ce20c1461090e578063a9fb763c1461092e578063ab2b885a1461094e578063ac3c99521461096e57600080fd5b80639745cc3d116101cc5780639745cc3d146108985780639979c009146108c85780639bf16297146108db578063a22cb465146108ee57600080fd5b806382482f7c146108295780638da5cb5b1461084357806395d89b4114610863578063966be72f1461087857600080fd5b80634709384f116102ed578063685f8e5b116102805780636c0a47491161024f5780636c0a4749146107a25780636db3dffb146107b55780636ef18867146107dc57806370a082311461080957600080fd5b8063685f8e5b1461072d578063690e7c091461074d5780636ab638c51461076d5780636c0360eb1461078d57600080fd5b80635eac6239116102bc5780635eac6239146106915780635edb9656146106b15780636350b2c2146106e05780636352211e1461070d57600080fd5b80634709384f1461060e57806353f6fa251461062e5780635a3869b11461065b5780635d8f6b731461067157600080fd5b8063095ea7b31161036557806326a49e371161033457806326a49e37146105995780633badca25146105b95780633ccfd60b146105d957806342842e0e146105ee57600080fd5b8063095ea7b314610517578063162033b61461053757806318160ddd1461056457806323b872dd1461057957600080fd5b8063053e27ab116103a1578063053e27ab1461047457806306fbedbe1461049457806306fdde03146104bd578063081812fc146104df57600080fd5b806301e1d114146103de57806301ffc9a71461040257806302ff172114610432578063053ddaed1461045257600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506008545b6040519081526020015b60405180910390f35b34801561040e57600080fd5b5061042261041d3660046145c6565b610c81565b60405190151581526020016103f9565b34801561043e57600080fd5b506103ef61044d36600461456b565b610cd3565b34801561045e57600080fd5b5061047261046d36600461477a565b610d3b565b005b34801561048057600080fd5b506103ef61048f3660046146d5565b610d56565b3480156104a057600080fd5b506104aa6109c481565b60405161ffff90911681526020016103f9565b3480156104c957600080fd5b506104d2610d92565b6040516103f99190614a71565b3480156104eb57600080fd5b506104ff6104fa3660046146d5565b610e24565b6040516001600160a01b0390911681526020016103f9565b34801561052357600080fd5b506104726105323660046144d8565b610ebe565b34801561054357600080fd5b506105576105523660046146d5565b610fd4565b6040516103f9919061499d565b34801561057057600080fd5b506103ef611008565b34801561058557600080fd5b50610472610594366004614324565b611018565b3480156105a557600080fd5b506103ef6105b43660046146d5565b611049565b3480156105c557600080fd5b506104726105d4366004614503565b6110e1565b3480156105e557600080fd5b5061047261117f565b3480156105fa57600080fd5b50610472610609366004614324565b6111b3565b34801561061a57600080fd5b506104726106293660046146d5565b6111ce565b34801561063a57600080fd5b506103ef6106493660046146d5565b600d6020526000908152604090205481565b34801561066757600080fd5b506104aa6103e881565b34801561067d57600080fd5b5061047261068c3660046145fe565b611264565b34801561069d57600080fd5b506104726106ac36600461456b565b61129a565b3480156106bd57600080fd5b506104226106cc3660046146d5565b600090815260096020526040902054421090565b3480156106ec57600080fd5b506103ef6106fb3660046146d5565b600c6020526000908152604090205481565b34801561071957600080fd5b506104ff6107283660046146d5565b6112b1565b34801561073957600080fd5b506105576107483660046146d5565b611328565b34801561075957600080fd5b506104726107683660046146d5565b611357565b34801561077957600080fd5b506103ef6107883660046146d5565b6113d1565b34801561079957600080fd5b506104d2611406565b6104726107b0366004614631565b611494565b3480156107c157600080fd5b506107ca600081565b60405160ff90911681526020016103f9565b3480156107e857600080fd5b506107fc6107f73660046146ed565b611786565b6040516103f99190614a39565b34801561081557600080fd5b506103ef6108243660046141fa565b6117bd565b34801561083557600080fd5b506007546107ca9060ff1681565b34801561084f57600080fd5b506019546104ff906001600160a01b031681565b34801561086f57600080fd5b506104d2611844565b34801561088457600080fd5b506103ef6108933660046146ed565b611853565b3480156108a457600080fd5b506107ca6108b33660046146d5565b60009081526010602052604090205460ff1690565b6103ef6108d63660046147fb565b611895565b6104726108e9366004614711565b611910565b3480156108fa57600080fd5b506104726109093660046144ab565b611967565b34801561091a57600080fd5b506104726109293660046147fb565b611a2c565b34801561093a57600080fd5b506103ef6109493660046146d5565b611b23565b34801561095a57600080fd5b50610472610969366004614711565b611bf6565b34801561097a57600080fd5b50610472610989366004614459565b611c0a565b34801561099a57600080fd5b506104726109a9366004614711565b611c52565b3480156109ba57600080fd5b506109ce6109c93660046146ed565b611c9a565b6040516103f991906149ea565b3480156109e757600080fd5b506104726109f6366004614364565b611cca565b348015610a0757600080fd5b506103ef610a163660046146d5565b60096020526000908152604090205481565b348015610a3457600080fd5b506107ca600281565b348015610a4957600080fd5b50610a6c610a5836600461426a565b63f23a6e6160e01b98975050505050505050565b6040516001600160e01b031990911681526020016103f9565b348015610a9157600080fd5b506018546104ff906001600160a01b031681565b348015610ab157600080fd5b506104d2610ac03660046146d5565b611cfc565b348015610ad157600080fd5b50610472610ae036600461477a565b611d71565b348015610af157600080fd5b506103ef601b5481565b348015610b0757600080fd5b50610b1b610b163660046146d5565b611dba565b6040516103f9959493929190614a84565b348015610b3857600080fd5b506107ca600181565b348015610b4d57600080fd5b506104aa60c881565b348015610b6257600080fd5b506104d2611f1c565b348015610b7757600080fd5b50610422610b86366004614232565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610bc057600080fd5b50610472610bcf3660046146d5565b611f29565b348015610be057600080fd5b50610a6c610bef3660046143e0565b63f23a6e6160e01b9695505050505050565b348015610c0d57600080fd5b50610472610c1c3660046141fa565b611fa3565b348015610c2d57600080fd5b506103ef610c3c3660046146d5565b600f6020526000908152604090205481565b348015610c5a57600080fd5b50610557610c693660046146d5565b612027565b610472610c7c366004614711565b612056565b60006001600160e01b031982166380ac58cd60e01b1480610cb257506001600160e01b03198216635b5e139f60e01b145b80610ccd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805b61ffff8116831115610d3457610d1684848361ffff16818110610d0a57634e487b7160e01b600052603260045260246000fd5b90506020020135611b23565b610d209083614ce8565b915080610d2c81614e67565b915050610cd7565b5092915050565b610d4784848484611d71565b610d5084611f29565b50505050565b600060088281548110610d7957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600401549050919050565b606060008054610da190614e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcd90614e2c565b8015610e1a5780601f10610def57610100808354040283529160200191610e1a565b820191906000526020600020905b815481529060010190602001808311610dfd57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ea25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ec9826112b1565b9050806001600160a01b0316836001600160a01b03161415610f375760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610e99565b336001600160a01b0382161480610f535750610f538133610b86565b610fc55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e99565b610fcf8383612061565b505050565b60606002610ff18360009081526010602052604090205460ff1690565b60ff16141561100357610ccd826120cf565b919050565b600061101360065490565b905090565b611022338261213b565b61103e5760405162461bcd60e51b8152600401610e9990614b74565b610fcf838383612232565b600061105460085490565b82106110925760405162461bcd60e51b815260206004820152600d60248201526c105cdcd95d081a5b9d985b1a59609a1b6044820152606401610e99565b6000828152600960205260409020544210156110d8576127106110b76103e882614d3f565b61ffff166110c484610d56565b6110ce9190614d20565b610ccd9190614d00565b610ccd82610d56565b8281146110ed57600080fd5b60005b60ff8116821115611178576111663386868460ff1681811061112257634e487b7160e01b600052603260045260246000fd5b905060200201602081019061113791906141fa565b85858560ff1681811061115a57634e487b7160e01b600052603260045260246000fd5b90506020020135611018565b8061117081614ea4565b9150506110f0565b5050505050565b6019546001600160a01b031633146111a95760405162461bcd60e51b8152600401610e9990614b22565b6111b16123d2565b565b610fcf83838360405180602001604052806000815250611cca565b8033806111da836112b1565b6001600160a01b0316146112005760405162461bcd60e51b8152600401610e9990614b22565b8260028061121d8360009081526010602052604090205460ff1690565b60ff161461123d5760405162461bcd60e51b8152600401610e9990614b4d565b6000611248866125ea565b905061125381612db2565b61125c86612dcc565b505050505050565b6019546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610e9990614b22565b610fcf601a8383613e36565b60006112a68383612dd7565b9050610fcf81612db2565b6000818152600260205260408120546001600160a01b031680610ccd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610e99565b606060026113458360009081526010602052604090205460ff1690565b60ff16141561100357610ccd82612f40565b803380611363836112b1565b6001600160a01b0316146113895760405162461bcd60e51b8152600401610e9990614b22565b826001806113a68360009081526010602052604090205460ff1690565b60ff16146113c65760405162461bcd60e51b8152600401610e9990614b4d565b611178856002612faa565b60008181526010602052604081205460ff16600214156113fe575060009081526011602052604090205490565b506000919050565b600e805461141390614e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461143f90614e2c565b801561148c5780601f106114615761010080835404028352916020019161148c565b820191906000526020600020905b81548152906001019060200180831161146f57829003601f168201915b505050505081565b60075460ff1683146114d85760405162461bcd60e51b815260206004820152600d60248201526c105cdcd95d081a5b9d985b1a59609a1b6044820152606401610e99565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561151157600080fd5b505afa158015611525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115499190614216565b6001600160a01b0316336001600160a01b0316146115c65761271060c86115708385614d20565b61157a9190614d20565b6115849190614d00565b3410156115c65760405162461bcd60e51b815260206004820152601060248201526f119959481a5b9cdd59999a58da595b9d60821b6044820152606401610e99565b600880546040805160e06020601f8d01819004028201810190925260c081018b815292939290918291908d908d9081908501838280828437600092019190915250505090825250604080516020601f8c018190048102820181019092528a815291810191908b908b90819084018382808284376000920191909152505050908252506020016116558789614d79565b81523360208083019190915260408201879052606090910185905282546001810184556000938452928190208251805193946006029091019261169b9284920190613eba565b5060208281015180516116b49260018501920190613eba565b50604082015180516116d0916002840191602090910190613f2e565b5060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015560a0820151816005015550507fb6173f7888882f5517c3d5b5a1aadda003535c6209fa050217d63a5ca60a0722816008838154811061175757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201604051611773929190614bc5565b60405180910390a1505050505050505050565b606060026117a38460009081526010602052604090205460ff1690565b60ff161415610ccd576117b68383613045565b9392505050565b60006001600160a01b0382166118285760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610e99565b506001600160a01b031660009081526003602052604090205490565b606060018054610da190614e2c565b60008281526010602052604081205460ff1660021415610ccd5760008381526013602090815260408083206001600160a01b03861684529091529020546117b6565b6000816118a184611049565b6118ab9190614d20565b3410156118ed5760405162461bcd60e51b815260206004820152601060248201526f119959481a5b9cdd59999a58da595b9d60821b6044820152606401610e99565b6000806118fb8533866130b9565b915091506119088161311c565b509392505050565b8260008061192d8360009081526010602052604090205460ff1690565b60ff161461194d5760405162461bcd60e51b8152600401610e9990614b4d565b341561195c5761195c3461311c565b61117885858561312e565b6001600160a01b0382163314156119c05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610e99565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336001600160a01b031660088381548110611a5757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360069092020101546001600160a01b031614611a915760405162461bcd60e51b8152600401610e9990614b22565b428111611ad35760405162461bcd60e51b815260206004820152601060248201526f111a5cd8dbdd5b9d081a5b9d985b1a5960821b6044820152606401610e99565b60008281526009602090815260409182902083905581518481529081018390527f6e9df22cc825945ccdb219977832c3a93752e87bf6b8a9d778c260da50c5003291015b60405180910390a15050565b60008060088381548110611b4757634e487b7160e01b600052603260045260246000fd5b6000918252602080832060046006909302019190910154858352600c9091526040822054909250612710611b7d6109c485614d20565b611b879190614d00565b611b919190614d20565b6000858152600d602052604081205491925090612710611bb36103e886614d20565b611bbd9190614d00565b611bc79190614d20565b6000868152600a6020526040902054909150611be38284614d62565b611bed9190614d62565b95945050505050565b611c01838383611c52565b610fcf83611f29565b60005b60ff8116821115610d5057611c40338585858560ff1681811061115a57634e487b7160e01b600052603260045260246000fd5b80611c4a81614ea4565b915050611c0d565b82600080611c6f8360009081526010602052604090205460ff1690565b60ff1614611c8f5760405162461bcd60e51b8152600401610e9990614b4d565b6111788585856132f4565b60606002611cb78460009081526010602052604090205460ff1690565b60ff161415610ccd576117b6838361346c565b611cd4338361213b565b611cf05760405162461bcd60e51b8152600401610e9990614b74565b610d50848484846134fd565b6060600e611d0983613530565b604090810151600085815260106020529190912054815160ff909116908110611d4257634e487b7160e01b600052603260045260246000fd5b6020026020010151604051602001611d5b9291906148e0565b6040516020818303038152906040529050919050565b83600080611d8e8360009081526010602052604090205460ff1690565b60ff1614611dae5760405162461bcd60e51b8152600401610e9990614b4d565b61125c868686866137e8565b60088181548110611dca57600080fd5b9060005260206000209060060201600091509050806000018054611ded90614e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1990614e2c565b8015611e665780601f10611e3b57610100808354040283529160200191611e66565b820191906000526020600020905b815481529060010190602001808311611e4957829003601f168201915b505050505090806001018054611e7b90614e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea790614e2c565b8015611ef45780601f10611ec957610100808354040283529160200191611ef4565b820191906000526020600020905b815481529060010190602001808311611ed757829003601f168201915b505050506003830154600484015460059094015492936001600160a01b039091169290915085565b601a805461141390614e2c565b803380611f35836112b1565b6001600160a01b031614611f5b5760405162461bcd60e51b8152600401610e9990614b22565b82600080611f788360009081526010602052604090205460ff1690565b60ff1614611f985760405162461bcd60e51b8152600401610e9990614b4d565b611178856001612faa565b6018546001600160a01b03163314611fcd5760405162461bcd60e51b8152600401610e9990614b22565b611fd56123d2565b601980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060026120448360009081526010602052604090205460ff1690565b60ff16141561100357610ccd826139ce565b611c01838383611910565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612096826112b1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526012602090815260409182902080548351818402810184019094528084526060939283018282801561212f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612111575b50505050509050919050565b6000818152600260205260408120546001600160a01b03166121b45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610e99565b60006121bf836112b1565b9050806001600160a01b0316846001600160a01b031614806121fa5750836001600160a01b03166121ef84610e24565b6001600160a01b0316145b8061222a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612245826112b1565b6001600160a01b0316146122ad5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610e99565b6001600160a01b03821661230f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610e99565b61231a600082612061565b6001600160a01b0383166000908152600360205260408120805460019290612343908490614d62565b90915550506001600160a01b0382166000908152600360205260408120805460019290612371908490614ce8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000601b54476123e29190614d62565b905080156125e757601860009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561243857600080fd5b505afa15801561244c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124709190614216565b6019546001600160a01b03908116911614156124c4576018546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156124c0573d6000803e3d6000fd5b5050565b6000612710601860009054906101000a90046001600160a01b03166001600160a01b031663bc86bd786040518163ffffffff1660e01b815260040160206040518083038186803b15801561251757600080fd5b505afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f919061481c565b61255c9060ff1684614d20565b6125669190614d00565b6018546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156125a1573d6000803e3d6000fd5b506125ac8183614d62565b6019546040519193506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610fcf573d6000803e3d6000fd5b50565b6000818152601160205260408120541561264e57600082815260116020526040808220549051339282156108fc02929190818181858888f19350505050158015612638573d6000803e3d6000fd5b5050600081815260116020526040812080549190555b60008281526012602052604090205415612835576000828152601360205260408120905b60008481526012602052604090205481101561281b5760008481526012602052604090208054829081106126b657634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015486835260129091526040822080546001600160a01b039092169263a9059cbb9233928792918790811061270757634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b039081168452908301939093526040918201902054905160e085901b6001600160e01b03191681529290911660048301526024820152604401602060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a891906145aa565b506000848152601360209081526040808320601290925282208054919291849081106127e457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040018120558061281381614e89565b915050612672565b50600083815260126020526040812061283391613f87565b505b60008281526014602052604090205415612a78576000828152601560205260408120905b600084815260146020526040902054811015612a5e5760005b6000858152601460205260409020548110156129e35760008581526014602052604090208054839081106128b657634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd3033866000601460008c8152602001908152602001600020888154811061291957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902080548690811061295d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156129b857600080fd5b505af11580156129cc573d6000803e3d6000fd5b5050505080806129db90614e89565b915050612872565b50600084815260156020908152604080832060149092528220805491929184908110612a1f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040018120612a4c91613f87565b80612a5681614e89565b915050612859565b506000838152601460205260408120612a7691613f87565b505b600082815260166020526040902054156110035760005b600083815260166020526040902054811015612d9a5760005b600084815260176020908152604080832060169092528220805491929185908110612ae357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054811015612d1f576000848152601660205260409020805483908110612b3d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548683526017825260408084206016909352832080546001600160a01b039092169363f242432a93309333939192919089908110612b9857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020805486908110612bdc57634e487b7160e01b600052603260045260246000fd5b600091825260208083206002909202909101548a83526017825260408084206016909352832080549193918a908110612c2557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020805487908110612c6957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101546040518563ffffffff1660e01b8152600401612cda94939291906001600160a01b0394851681529290931660208301526040820152606081019190915260a060808201819052600490820152633078303160e01b60c082015260e00190565b600060405180830381600087803b158015612cf457600080fd5b505af1158015612d08573d6000803e3d6000fd5b505050508080612d1790614e89565b915050612aa8565b50600083815260176020908152604080832060169092528220805491929184908110612d5b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040018120612d8891613fa5565b80612d9281614e89565b915050612a8f565b50600082815260166020526040812061100391613f87565b80601b6000828254612dc49190614d62565b909155505050565b6125e7816000612faa565b6000805b61ffff8116831115612ed257600084848361ffff16818110612e0d57634e487b7160e01b600052603260045260246000fd5b905060200201359050336001600160a01b031660088281548110612e4157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360069092020101546001600160a01b031614612e7b5760405162461bcd60e51b8152600401610e9990614b22565b6000612e8682611b23565b905080600a60008481526020019081526020016000206000828254612eab9190614ce8565b90915550612ebb90508185614ce8565b935050508080612eca90614e67565b915050612ddb565b50604051339082156108fc029083906000818181858888f19350505050158015612f00573d6000803e3d6000fd5b5060408051338152602081018390527ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe910160405180910390a192915050565b60008181526016602090815260409182902080548351818402810184019094528084526060939283018282801561212f576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121115750505050509050919050565b60075460ff90811690821610612ff25760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461746560981b6044820152606401610e99565b600082815260106020908152604091829020805460ff191660ff85169081179091558251858152918201527f5f37cb0e663bb52ce92e7edf0e34cd00146463aea0dabf3dd721dbd522ec98589101611b17565b60008281526015602090815260408083206001600160a01b03851684528252918290208054835181840281018401909452808452606093928301828280156130ac57602002820191906000526020600020905b815481526020019060010190808311613098575b5050505050905092915050565b60008060006130c88685613a38565b90506000806130d686613baa565b915091505b80821161310f576130ec8783613bc1565b6000828152600f602052604090208890558161310781614e89565b9250506130db565b9791965090945050505050565b80601b6000828254612dc49190614ce8565b34156131585760008381526011602052604081208054349290613152908490614ce8565b90915550505b60005b8251811015610d5057600083828151811061318657634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008383815181106131b257634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd90606401602060405180830381600087803b15801561320e57600080fd5b505af1158015613222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324691906145aa565b5060008681526013602090815260408083206001600160a01b03861684529091529020546132a65760008681526012602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008681526013602090815260408083206001600160a01b0386168452909152812080548392906132d8908490614ce8565b92505081905550505080806132ec90614e89565b91505061315b565b60005b8251811015610d5057600083828151811061332257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600083838151811061334e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd90606401600060405180830381600087803b1580156133aa57600080fd5b505af11580156133be573d6000803e3d6000fd5b50505060008781526015602090815260408083206001600160a01b0387168452909152902054151590506134245760008681526014602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008681526015602090815260408083206001600160a01b0390951683529381529281208054600181018255908252929020909101558061346481614e89565b9150506132f7565b60008281526017602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156134f1578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906134ab565b50505050905092915050565b613508848484612232565b61351484848484613d03565b610d505760405162461bcd60e51b8152600401610e9990614ad0565b6135726040518060c0016040528060608152602001606081526020016060815260200160006001600160a01b0316815260200160008152602001600081525090565b6000828152600f60205260409020546008805490919081106135a457634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602016040518060c00160405290816000820180546135cd90614e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546135f990614e2c565b80156136465780601f1061361b57610100808354040283529160200191613646565b820191906000526020600020905b81548152906001019060200180831161362957829003601f168201915b5050505050815260200160018201805461365f90614e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461368b90614e2c565b80156136d85780601f106136ad576101008083540402835291602001916136d8565b820191906000526020600020905b8154815290600101906020018083116136bb57829003601f168201915b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156137b257838290600052602060002001805461372590614e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461375190614e2c565b801561379e5780601f106137735761010080835404028352916020019161379e565b820191906000526020600020905b81548152906001019060200180831161378157829003601f168201915b505050505081526020019060010190613706565b5050509082525060038201546001600160a01b031660208201526004820154604082015260059091015460609091015292915050565b60005b835181101561117857600084828151811061381657634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061384257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084848151811061386e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010151604051637921219560e11b815233600480830191909152306024830152604482018590526064820183905260a0608483015260a4820152630307830360e41b60c48201529091506001600160a01b0384169063f242432a9060e401600060405180830381600087803b1580156138ee57600080fd5b505af1158015613902573d6000803e3d6000fd5b50505060008981526017602090815260408083206001600160a01b0388168452909152902054151590506139685760008881526016602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0385161790555b60008881526017602090815260408083206001600160a01b039096168352948152848220855180870190965293855284810192835283546001818101865594835291209351600290910290930192835551910155806139c681614e89565b9150506137eb565b60008181526014602090815260409182902080548351818402810184019094528084526060939283018282801561212f576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121115750505050509050919050565b6000828260088281548110613a5d57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602016005015481600c600085815260200190815260200160002054613a8e9190614ce8565b1115613ad35760405162461bcd60e51b815260206004820152601460248201527346756c6c79206d696e74656420616c726561647960601b6044820152606401610e99565b6000858152600c602052604081208054869290613af1908490614ce8565b9091555060009050613b0286610d56565b600087815260096020526040902054909150421015613b7a576000868152600d602052604081208054879290613b39908490614ce8565b90915550859050612710613b516103e86109c4614d3f565b613b5f9061ffff1684614d20565b613b699190614d00565b613b739190614d20565b9350613ba1565b84612710613b8a6109c484614d20565b613b949190614d00565b613b9e9190614d20565b93505b50505092915050565b600080613bb8600684613e10565b91509150915091565b6001600160a01b038216613c175760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e99565b6000818152600260205260409020546001600160a01b031615613c7c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e99565b6001600160a01b0382166000908152600360205260408120805460019290613ca5908490614ce8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15613e0557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d47903390899088908890600401614960565b602060405180830381600087803b158015613d6157600080fd5b505af1925050508015613d91575060408051601f3d908101601f19168201909252613d8e918101906145e2565b60015b613deb573d808015613dbf576040519150601f19603f3d011682016040523d82523d6000602084013e613dc4565b606091505b508051613de35760405162461bcd60e51b8152600401610e9990614ad0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061222a565b506001949350505050565b81546000908190613e22906001614ce8565b8454840180865590925090505b9250929050565b828054613e4290614e2c565b90600052602060002090601f016020900481019282613e645760008555613eaa565b82601f10613e7d5782800160ff19823516178555613eaa565b82800160010185558215613eaa579182015b82811115613eaa578235825591602001919060010190613e8f565b50613eb6929150613fc6565b5090565b828054613ec690614e2c565b90600052602060002090601f016020900481019282613ee85760008555613eaa565b82601f10613f0157805160ff1916838001178555613eaa565b82800160010185558215613eaa579182015b82811115613eaa578251825591602001919060010190613f13565b828054828255906000526020600020908101928215613f7b579160200282015b82811115613f7b5782518051613f6b918491602090910190613eba565b5091602001919060010190613f4e565b50613eb6929150613fdb565b50805460008255906000526020600020908101906125e79190613fc6565b50805460008255600202906000526020600020908101906125e79190613ff8565b5b80821115613eb65760008155600101613fc7565b80821115613eb6576000613fef8282614013565b50600101613fdb565b5b80821115613eb65760008082556001820155600201613ff9565b50805461401f90614e2c565b6000825580601f1061402f575050565b601f0160209004906000526020600020908101906125e79190613fc6565b60006001600160401b0383111561406657614066614eda565b614079601f8401601f1916602001614c95565b905082815283838301111561408d57600080fd5b828260208301376000602084830101529392505050565b60008083601f8401126140b5578182fd5b5081356001600160401b038111156140cb578182fd5b6020830191508360208260051b8501011115613e2f57600080fd5b600082601f8301126140f6578081fd5b8135602061410b61410683614cc5565b614c95565b80838252828201915082860187848660051b890101111561412a578586fd5b855b8581101561415157813561413f81614ef0565b8452928401929084019060010161412c565b5090979650505050505050565b600082601f83011261416e578081fd5b8135602061417e61410683614cc5565b80838252828201915082860187848660051b890101111561419d578586fd5b855b858110156141515781358452928401929084019060010161419f565b60008083601f8401126141cc578182fd5b5081356001600160401b038111156141e2578182fd5b602083019150836020828501011115613e2f57600080fd5b60006020828403121561420b578081fd5b81356117b681614ef0565b600060208284031215614227578081fd5b81516117b681614ef0565b60008060408385031215614244578081fd5b823561424f81614ef0565b9150602083013561425f81614ef0565b809150509250929050565b60008060008060008060008060a0898b031215614285578384fd5b883561429081614ef0565b975060208901356142a081614ef0565b965060408901356001600160401b03808211156142bb578586fd5b6142c78c838d016140a4565b909850965060608b01359150808211156142df578586fd5b6142eb8c838d016140a4565b909650945060808b0135915080821115614303578384fd5b506143108b828c016141bb565b999c989b5096995094979396929594505050565b600080600060608486031215614338578081fd5b833561434381614ef0565b9250602084013561435381614ef0565b929592945050506040919091013590565b60008060008060808587031215614379578182fd5b843561438481614ef0565b9350602085013561439481614ef0565b92506040850135915060608501356001600160401b038111156143b5578182fd5b8501601f810187136143c5578182fd5b6143d48782356020840161404d565b91505092959194509250565b60008060008060008060a087890312156143f8578384fd5b863561440381614ef0565b9550602087013561441381614ef0565b9450604087013593506060870135925060808701356001600160401b0381111561443b578283fd5b61444789828a016141bb565b979a9699509497509295939492505050565b60008060006040848603121561446d578081fd5b833561447881614ef0565b925060208401356001600160401b03811115614492578182fd5b61449e868287016140a4565b9497909650939450505050565b600080604083850312156144bd578182fd5b82356144c881614ef0565b9150602083013561425f81614f05565b600080604083850312156144ea578182fd5b82356144f581614ef0565b946020939093013593505050565b60008060008060408587031215614518578182fd5b84356001600160401b038082111561452e578384fd5b61453a888389016140a4565b90965094506020870135915080821115614552578384fd5b5061455f878288016140a4565b95989497509550505050565b6000806020838503121561457d578182fd5b82356001600160401b03811115614592578283fd5b61459e858286016140a4565b90969095509350505050565b6000602082840312156145bb578081fd5b81516117b681614f05565b6000602082840312156145d7578081fd5b81356117b681614f13565b6000602082840312156145f3578081fd5b81516117b681614f13565b60008060208385031215614610578182fd5b82356001600160401b03811115614625578283fd5b61459e858286016141bb565b60008060008060008060008060a0898b03121561464c578182fd5b88356001600160401b0380821115614662578384fd5b61466e8c838d016141bb565b909a50985060208b0135915080821115614686578384fd5b6146928c838d016141bb565b909850965060408b01359150808211156146aa578384fd5b506146b78b828c016140a4565b999c989b509699959896976060870135966080013595509350505050565b6000602082840312156146e6578081fd5b5035919050565b600080604083850312156146ff578182fd5b82359150602083013561425f81614ef0565b600080600060608486031215614725578081fd5b8335925060208401356001600160401b0380821115614742578283fd5b61474e878388016140e6565b93506040860135915080821115614763578283fd5b506147708682870161415e565b9150509250925092565b6000806000806080858703121561478f578182fd5b8435935060208501356001600160401b03808211156147ac578384fd5b6147b8888389016140e6565b945060408701359150808211156147cd578384fd5b6147d98883890161415e565b935060608701359150808211156147ee578283fd5b506143d48782880161415e565b6000806040838503121561480d578182fd5b50508035926020909101359150565b60006020828403121561482d578081fd5b815160ff811681146117b6578182fd5b60008151808452614855816020860160208601614e00565b601f01601f19169290920160200192915050565b6000815461487681614e2c565b80855260206001838116801561489357600181146148a7576148d5565b60ff198516888401526040880195506148d5565b866000528260002060005b858110156148cd5781548a82018601529083019084016148b2565b890184019650505b505050505092915050565b60008084546148ee81614e2c565b60018281168015614906576001811461491757614943565b60ff19841687528287019450614943565b8886526020808720875b8581101561493a5781548a820152908401908201614921565b50505082870194505b505050508351614957818360208801614e00565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906149939083018461483d565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156149de5783516001600160a01b0316835292840192918401916001016149b9565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015614a2c57815180518552860151868501529284019290850190600101614a07565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156149de57835183529284019291840191600101614a55565b6020815260006117b6602083018461483d565b60a081526000614a9760a083018861483d565b8281036020840152614aa9818861483d565b6001600160a01b039690961660408401525050606081019290925260809091015292915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526011908201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604082015260600190565b6020808252600d908201526c14dd185d19481a5b9d985b1a59609a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b8281526000602060408184015260c06040840152614be7610100840185614869565b6001603f1980868403016060870152614c0283838901614869565b86810390910160808701526002870180548083529086528486209193508484019190600581901b85018601875b82811015614c5b57868203601f19018552614c4a8285614869565b948801949386019391508501614c2f565b5060038a01546001600160a01b031660a08a015260048a015460c08a015260059099015460e0909801979097525095979650505050505050565b604051601f8201601f191681016001600160401b0381118282101715614cbd57614cbd614eda565b604052919050565b60006001600160401b03821115614cde57614cde614eda565b5060051b60200190565b60008219821115614cfb57614cfb614ec4565b500190565b600082614d1b57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614d3a57614d3a614ec4565b500290565b600061ffff83811690831681811015614d5a57614d5a614ec4565b039392505050565b600082821015614d7457614d74614ec4565b500390565b6000614d8761410684614cc5565b808482526020808301925084368760051b87011115614da4578485fd5b845b87811015614df45781356001600160401b03811115614dc3578687fd5b870136601f820112614dd3578687fd5b614de136823586840161404d565b8652509382019390820190600101614da6565b50919695505050505050565b60005b83811015614e1b578181015183820152602001614e03565b83811115610d505750506000910152565b600181811c90821680614e4057607f821691505b60208210811415614e6157634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415614e7f57614e7f614ec4565b6001019392505050565b6000600019821415614e9d57614e9d614ec4565b5060010190565b600060ff821660ff811415614ebb57614ebb614ec4565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146125e757600080fd5b80151581146125e757600080fd5b6001600160e01b0319811681146125e757600080fdfea264697066735822122025691842e273041fb04ad8ce86d299ea8dde22b28bd0f6ae68d32e6c40123cba64736f6c63430008040033000000000000000000000000308a7d6074ae5f734152ae305ba4d97084ff494b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001568747470733a2f2f697066732e696f2f697066732f0000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d6168625831335a6b6b38546833693363777a617371644c684e4d624a746459314a6243374237576e6671704d000000000000000000000000000000000000
0xa264697066735822122025691842e273041fb04ad8ce86d299ea8dde22b28bd0f6ae68d32e6c40123cba64736f6c63430008040033000000000000000000000000308a7d6074ae5f734152ae305ba4d97084ff494b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001568747470733a2f2f697066732e696f2f697066732f0000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d6168625831335a6b6b38546833693363777a617371644c684e4d624a746459314a6243374237576e6671704d000000000000000000000000000000000000