[ { "inputs": [ { "internalType": "contract IERC20", "name": "phi", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "player", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "craftId", "type": "uint256" } ], "name": "CraftClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "player", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "craftId", "type": "uint256" } ], "name": "CraftStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "weight", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "ipfsHash", "type": "string" } ], "name": "ResourceTypeRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "craftId", "type": "uint256" } ], "name": "claimCraft", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "craft", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId1", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId2", "type": "uint256" } ], "name": "getCraftingResult", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "getCrafts", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "finishTimestamp", "type": "uint256" }, { "internalType": "bool", "name": "claimed", "type": "bool" } ], "internalType": "struct Resource.PendingCraft[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlayers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "offset", "type": "uint256" }, { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "getPlayersPaginated", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "getResourceTypes", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "enum Resource.Tier", "name": "tier", "type": "uint8" }, { "internalType": "uint256[]", "name": "ingredients", "type": "uint256[]" }, { "internalType": "string", "name": "ipfsHash", "type": "string" } ], "internalType": "struct Resource.ResourceType[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "getResourceWeight", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ChestSale", "name": "chest", "type": "address" } ], "name": "initialMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "player", "type": "address" } ], "name": "ownedTokens", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "player", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" }, { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "ownedTokensPaginated", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "player", "type": "address" } ], "name": "pendingCrafts", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "enum Resource.Tier", "name": "tier", "type": "uint8" }, { "internalType": "uint256[]", "name": "ingredients", "type": "uint256[]" }, { "internalType": "string", "name": "ipfsHash", "type": "string" } ], "internalType": "struct Resource.ResourceType[]", "name": "types", "type": "tuple[]" } ], "name": "registerResourceTypes", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "resourceCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "resourceTypes", "outputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "enum Resource.Tier", "name": "tier", "type": "uint8" }, { "internalType": "string", "name": "ipfsHash", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "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": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdrawFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b50604051620041fb380380620041fb833981016040819052620000349162000801565b6040518060600160405280602581526020016200417a60259139620000598162000301565b5062000065336200031a565b606081901b6001600160601b03191660805260408051600480825260a08201909252600091816020015b62000099620006db565b8152602001906001900390816200008f579050506040805160e081018252600560a08201908152640cac2e4e8d60db1b60c083015281526001602082015291925081016000815260200160006040519080825280602002602001820160405280156200010f578160200160208202803683370190505b5081526020016040518060600160405280602e8152602001620041cd602e91398152508160008151811062000148576200014862000939565b6020908102919091018101919091526040805160e081018252600560a08201908152643bb0ba32b960d91b60c08301528152600181840152600081830181905282518181529384019092529160608301915081526020016040518060600160405280602e81526020016200414c602e913981525081600181518110620001d257620001d262000939565b6020908102919091018101919091526040805160e081018252600460a08201908152636669726560e01b60c08301528152600181840152600081830181905282518181529384019092529160608301915081526020016040518060600160405280602e81526020016200419f602e9139815250816002815181106200025b576200025b62000939565b6020908102919091018101919091526040805160e081018252600360a082019081526230b4b960e91b60c08301528152600181840152600081830181905282518181529384019092529160608301915081526020016040518060600160405280602e81526020016200411e602e913981525081600381518110620002e357620002e362000939565b6020908102919091010152620002f9816200036c565b50506200094f565b8051620003169060029060208401906200071e565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6003546001600160a01b03163314620003cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b81518110156200031657620003f06004620006ce60201b62001af91760201c565b6000620004096004620006d760201b62001b021760201c565b905082828151811062000420576200042062000939565b6020908102919091018101516000838152600983526040902081518051929391926200045092849201906200071e565b506020820151816001015560408201518160020160006101000a81548160ff0219169083600581111562000488576200048862000923565b021790555060608201518051620004aa916003840191602090910190620007ad565b5060808201518051620004c89160048401916020909101906200071e565b50905050828281518110620004e157620004e162000939565b6020026020010151606001515160001415620004fd576200061a565b82828151811062000512576200051262000939565b6020026020010151606001515160021415620005d15780600d600085858151811062000542576200054262000939565b60200260200101516060015160008151811062000563576200056362000939565b60200260200101518152602001908152602001600020600085858151811062000590576200059062000939565b602002602001015160600151600181518110620005b157620005b162000939565b60200260200101518152602001908152602001600020819055506200061a565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420696e6772656469656e747320636f756e74000000000000006044820152606401620003c3565b807fc61fac2cf66079c61febae7d287c6afef4bc46ad9dc3d5ceca684238efde13c884848151811062000651576200065162000939565b60200260200101516000015185858151811062000672576200067262000939565b60200260200101516020015186868151811062000693576200069362000939565b602002602001015160800151604051620006b09392919062000883565b60405180910390a25080620006c581620008f9565b915050620003cf565b80546001019055565b5490565b6040518060a001604052806060815260200160008152602001600060058111156200070a576200070a62000923565b815260200160608152602001606081525090565b8280546200072c90620008bc565b90600052602060002090601f0160209004810192826200075057600085556200079b565b82601f106200076b57805160ff19168380011785556200079b565b828001600101855582156200079b579182015b828111156200079b5782518255916020019190600101906200077e565b50620007a9929150620007ea565b5090565b8280548282559060005260206000209081019282156200079b57916020028201828111156200079b5782518255916020019190600101906200077e565b5b80821115620007a95760008155600101620007eb565b6000602082840312156200081457600080fd5b81516001600160a01b03811681146200082c57600080fd5b9392505050565b6000815180845260005b818110156200085b576020818501810151868301820152016200083d565b818111156200086e576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000898606083018662000833565b8460208401528281036040840152620008b2818562000833565b9695505050505050565b600181811c90821680620008d157607f821691505b60208210811415620008f357634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200091c57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60805160601c6137a26200097c60003960008181610621015281816106a50152611a0a01526137a26000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c806375b94ff4116100f9578063a22cb46511610097578063e985e9c511610071578063e985e9c5146103cf578063f242432a1461040b578063f2fde38b1461041e578063f3917bd21461043157600080fd5b8063a22cb46514610396578063b12ab40f146103a9578063c268f9ba146103bc57600080fd5b806388b5adca116100d357806388b5adca146103305780638b5b9ccc146103505780638da5cb5b1461035857806395810f211461037357600080fd5b806375b94ff4146102da57806376487804146102ed5780637a15d30e1461031057600080fd5b806318951440116101665780633b508352116101405780633b5083521461028c57806346c8165d146102ac5780634e1273f4146102bf578063715018a6146102d257600080fd5b806318951440146102465780632eb2c2d614610266578063306e49e71461027957600080fd5b8062fdd58e146101ad57806301ffc9a7146101d35780630a3fa24a146101f65780630e89341c146101fe578063164e68de1461021e578063184cf99b14610233575b600080fd5b6101c06101bb366004612d10565b610444565b6040519081526020015b60405180910390f35b6101e66101e1366004612fed565b6104de565b60405190151581526020016101ca565b6101c061052e565b61021161020c366004613027565b61053e565b6040516101ca9190613361565b61023161022c366004612b77565b6105d2565b005b610231610241366004612e43565b6106d0565b610259610254366004613059565b6109b7565b6040516101ca91906131b8565b610231610274366004612bcd565b610a80565b610231610287366004613027565b610b17565b61029f61029a366004612b77565b610c6a565b6040516101ca9190613320565b61029f6102ba366004612d3c565b610c8e565b61029f6102cd366004612d71565b610d64565b610231610e8d565b6101c06102e8366004613059565b610ec3565b6103006102fb366004613027565b610f00565b6040516101ca9493929190613374565b61032361031e366004612f9c565b611040565b6040516101ca9190613260565b61034361033e366004612f9c565b6112cc565b6040516101ca9190613205565b6102596113d9565b6003546040516001600160a01b0390911681526020016101ca565b6101c0610381366004613027565b60009081526009602052604090206001015490565b6102316103a4366004612ce2565b6113e5565b61029f6103b7366004612b77565b6114bc565b6102316103ca366004612b77565b6114e0565b6101e66103dd366004612b94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b610231610419366004612c7a565b6115ef565b61023161042c366004612b77565b611676565b61023161043f366004613027565b61170e565b60006001600160a01b0383166104b55760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061050f57506001600160e01b031982166303a24d0760e21b145b806104d857506301ffc9a760e01b6001600160e01b03198316146104d8565b600061053960045490565b905090565b60606002805461054d9061357a565b80601f01602080910402602001604051908101604052809291908181526020018280546105799061357a565b80156105c65780601f1061059b576101008083540402835291602001916105c6565b820191906000526020600020905b8154815290600101906020018083116105a957829003601f168201915b50505050509050919050565b6003546001600160a01b031633146105fc5760405162461bcd60e51b81526004016104ac906134b8565b6040516370a0823160e01b815230600482018190526106cd9183906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190613040565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190611b06565b50565b6003546001600160a01b031633146106fa5760405162461bcd60e51b81526004016104ac906134b8565b60005b81518110156109b357610714600480546001019055565b600061071f60045490565b905082828151811061073357610733613663565b602090810291909101810151600083815260098352604090208151805192939192610761928492019061295c565b506020820151816001015560408201518160020160006101000a81548160ff0219169083600581111561079657610796613637565b0217905550606082015180516107b69160038401916020909101906129e0565b50608082015180516107d291600484019160209091019061295c565b509050508282815181106107e8576107e8613663565b60200260200101516060015151600014156108025761090d565b82828151811061081457610814613663565b60200260200101516060015151600214156108c55780600d600085858151811061084057610840613663565b60200260200101516060015160008151811061085e5761085e613663565b60200260200101518152602001908152602001600020600085858151811061088857610888613663565b6020026020010151606001516001815181106108a6576108a6613663565b602002602001015181526020019081526020016000208190555061090d565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c696420696e6772656469656e747320636f756e740000000000000060448201526064016104ac565b807fc61fac2cf66079c61febae7d287c6afef4bc46ad9dc3d5ceca684238efde13c884848151811061094157610941613663565b60200260200101516000015185858151811061095f5761095f613663565b60200260200101516020015186868151811061097d5761097d613663565b602002602001015160800151604051610998939291906133ac565b60405180910390a250806109ab81613606565b9150506106fd565b5050565b606060006109c56007611b66565b90506000836001600160401b038111156109e1576109e1613679565b604051908082528060200260200182016040528015610a0a578160200160208202803683370190505b50905060005b84811015610a775782610a23828861351f565b81518110610a3357610a33613663565b6020026020010151828281518110610a4d57610a4d613663565b6001600160a01b039092166020928302919091019091015280610a6f81613606565b915050610a10565b50949350505050565b6001600160a01b038516331480610a9c5750610a9c85336103dd565b610b035760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016104ac565b610b108585858585611b73565b5050505050565b336000908152600a60205260409020610b309082611d5e565b610b865760405162461bcd60e51b815260206004820152602160248201527f74686973206372616674206973206e6f742070656e64696e6720666f7220796f6044820152607560f81b60648201526084016104ac565b6000818152600b602052604090206001810154421015610be85760405162461bcd60e51b815260206004820152601b60248201527f74686973206372616674206973207374696c6c2070656e64696e67000000000060448201526064016104ac565b60028101805460ff19166001179055336000908152600a60205260409020610c109083611d76565b50610c31338260000154600160405180602001604052806000815250611d82565b60405182815233907f09cb363b7330c08920dd04bde0d0a87880b774eaf89de7f30d518975888299be9060200160405180910390a25050565b6001600160a01b0381166000908152600a602052604090206060906104d890611b66565b6001600160a01b0383166000908152600c6020526040812060609190610cb390611b66565b90506000836001600160401b03811115610ccf57610ccf613679565b604051908082528060200260200182016040528015610cf8578160200160208202803683370190505b50905060005b84811015610d585782610d11828861351f565b81518110610d2157610d21613663565b6020026020010151828281518110610d3b57610d3b613663565b602090810291909101015280610d5081613606565b915050610cfe565b509150505b9392505050565b60608151835114610dc95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016104ac565b600083516001600160401b03811115610de457610de4613679565b604051908082528060200260200182016040528015610e0d578160200160208202803683370190505b50905060005b8451811015610e8557610e58858281518110610e3157610e31613663565b6020026020010151858381518110610e4b57610e4b613663565b6020026020010151610444565b828281518110610e6a57610e6a613663565b6020908102919091010152610e7e81613606565b9050610e13565b509392505050565b6003546001600160a01b03163314610eb75760405162461bcd60e51b81526004016104ac906134b8565b610ec16000611e92565b565b6000828152600d6020908152604080832084845290915281205480610d5d5750506000908152600d60209081526040808320938352929052205490565b600960205260009081526040902080548190610f1b9061357a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f479061357a565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b50505050600183015460028401546004850180549495929460ff909216935090610fbd9061357a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe99061357a565b80156110365780601f1061100b57610100808354040283529160200191611036565b820191906000526020600020905b81548152906001019060200180831161101957829003601f168201915b5050505050905084565b6060600082516001600160401b0381111561105d5761105d613679565b60405190808252806020026020018201604052801561109657816020015b611083612a1a565b81526020019060019003908161107b5790505b50905060005b83518110156112c557600960008583815181106110bb576110bb613663565b602002602001015181526020019081526020016000206040518060a00160405290816000820180546110ec9061357a565b80601f01602080910402602001604051908101604052809291908181526020018280546111189061357a565b80156111655780601f1061113a57610100808354040283529160200191611165565b820191906000526020600020905b81548152906001019060200180831161114857829003601f168201915b505050918352505060018201546020820152600282015460409091019060ff16600581111561119657611196613637565b60058111156111a7576111a7613637565b8152602001600382018054806020026020016040519081016040528092919081815260200182805480156111fa57602002820191906000526020600020905b8154815260200190600101908083116111e6575b505050505081526020016004820180546112139061357a565b80601f016020809104026020016040519081016040528092919081815260200182805461123f9061357a565b801561128c5780601f106112615761010080835404028352916020019161128c565b820191906000526020600020905b81548152906001019060200180831161126f57829003601f168201915b5050505050815250508282815181106112a7576112a7613663565b602002602001018190525080806112bd90613606565b91505061109c565b5092915050565b6060600082516001600160401b038111156112e9576112e9613679565b60405190808252806020026020018201604052801561134057816020015b61132d604051806060016040528060008152602001600081526020016000151581525090565b8152602001906001900390816113075790505b50905060005b83518110156112c557600b600085838151811061136557611365613663565b60209081029190910181015182528181019290925260409081016000208151606081018352815481526001820154938101939093526002015460ff1615159082015282518390839081106113bb576113bb613663565b602002602001018190525080806113d190613606565b915050611346565b60606105396007611b66565b336001600160a01b03831614156114505760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016104ac565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b0381166000908152600c602052604090206060906104d890611b66565b6003546001600160a01b0316331461150a5760405162461bcd60e51b81526004016104ac906134b8565b60065460ff16156115675760405162461bcd60e51b815260206004820152602160248201527f696e697469616c206d696e7420697320706572666f726d656420616c726561646044820152607960f81b60648201526084016104ac565b61158581600161927c60405180602001604052806000815250611d82565b6115a381600261927c60405180602001604052806000815250611d82565b6115c181600361927c60405180602001604052806000815250611d82565b6115df81600461927c60405180602001604052806000815250611d82565b506006805460ff19166001179055565b6001600160a01b03851633148061160b575061160b85336103dd565b6116695760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016104ac565b610b108585858585611ee4565b6003546001600160a01b031633146116a05760405162461bcd60e51b81526004016104ac906134b8565b6001600160a01b0381166117055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ac565b6106cd81611e92565b60008181526009602052604090206003015461176c5760405162461bcd60e51b815260206004820152601b60248201527f4e6f2072656369706520666f722074686973207265736f75726365000000000060448201526064016104ac565b6000818152600960209081526040808320600301805482518185028101850190935280835291929091908301828280156117c557602002820191906000526020600020905b8154815260200190600101908083116117b1575b505050505090506000805b825181101561190f5760006117f133858481518110610e4b57610e4b613663565b1161183e5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420696e6772656469656e7473000000000000000060448201526064016104ac565b6118633384838151811061185457611854613663565b60200260200101516001612001565b81600581111561187557611875613637565b6009600085848151811061188b5761188b613663565b60209081029190910181015182528101919091526040016000206002015460ff1660058111156118bd576118bd613637565b11156118fd57600960008483815181106118d9576118d9613663565b60209081029190910181015182528101919091526040016000206002015460ff1691505b8061190781613606565b9150506117d0565b50600080600183600581111561192757611927613637565b141561194157506107089050670de0b6b3a76400006119f7565b600283600581111561195557611955613637565b141561196f5750611c209050671bc16d674ec800006119f7565b600383600581111561198357611983613637565b141561199d575061a8c090506729a2241af62c00006119f7565b60048360058111156119b1576119b1613637565b14156119cc5750620151809050673782dace9d9000006119f7565b60058360058111156119e0576119e0613637565b14156119f7575062093a809050674563918244f400005b8015611a3257611a326001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611b06565b611a40600580546001019055565b6000611a4b60055490565b905060405180606001604052808781526020018442611a6a919061351f565b815260006020918201819052838152600b8252604080822084518155848401516001820155938101516002909401805460ff191694151594909417909355338152600a90915220611abb908261217a565b5060405181815233907f7a1a44d9e743fa2a37d296b9222e3bf4f01742cf19a9c6dc2c4f0270a97c45df9060200160405180910390a2505050505050565b80546001019055565b5490565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611b60908590612186565b50505050565b60606000610d5d8361225d565b8151835114611bd55760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016104ac565b6001600160a01b038416611bfb5760405162461bcd60e51b81526004016104ac90613429565b33611c0a8187878787876122b8565b60005b8451811015611cf0576000858281518110611c2a57611c2a613663565b602002602001015190506000858381518110611c4857611c48613663565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015611c985760405162461bcd60e51b81526004016104ac9061346e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611cd590849061351f565b9250508190555050505080611ce990613606565b9050611c0d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d40929190613333565b60405180910390a4611d5681878787878761240d565b505050505050565b60008181526001830160205260408120541515610d5d565b6000610d5d8383612578565b6001600160a01b038416611de25760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016104ac565b33611e0281600087611df38861266b565b611dfc8861266b565b876122b8565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611e3290849061351f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610b10816000878787876126b6565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416611f0a5760405162461bcd60e51b81526004016104ac90613429565b33611f1a818787611df38861266b565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611f5b5760405162461bcd60e51b81526004016104ac9061346e565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611f9890849061351f565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611ff88288888888886126b6565b50505050505050565b6001600160a01b0383166120635760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016104ac565b33612092818560006120748761266b565b61207d8761266b565b604051806020016040528060008152506122b8565b6000838152602081815260408083206001600160a01b03881684529091529020548281101561210f5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016104ac565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6000610d5d8383612780565b60006121db826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127cf9092919063ffffffff16565b80519091501561225857808060200190518101906121f99190612fd0565b6122585760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ac565b505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156105c657602002820191906000526020600020905b8154815260200190600101908083116122995750505050509050919050565b60005b83518110156123f5576001600160a01b0386161580159061230a57508281815181106122e9576122e9613663565b602002602001015161230787868481518110610e4b57610e4b613663565b11155b156123615761235f84828151811061232457612324613663565b6020026020010151600c6000896001600160a01b03166001600160a01b03168152602001908152602001600020611d7690919063ffffffff16565b505b6001600160a01b0385161580159061238c575061238a85858381518110610e4b57610e4b613663565b155b156123e3576123e18482815181106123a6576123a6613663565b6020026020010151600c6000886001600160a01b03166001600160a01b0316815260200190815260200160002061217a90919063ffffffff16565b505b806123ed81613606565b9150506122bb565b506124016007866127e6565b50611ff86007856127e6565b6001600160a01b0384163b15611d565760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906124519089908990889088908890600401613120565b602060405180830381600087803b15801561246b57600080fd5b505af192505050801561249b575060408051601f3d908101601f191682019092526124989181019061300a565b60015b612548576124a761368f565b806308c379a014156124e157506124bc6136aa565b806124c757506124e3565b8060405162461bcd60e51b81526004016104ac9190613361565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016104ac565b6001600160e01b0319811663bc197c8160e01b14611ff85760405162461bcd60e51b81526004016104ac906133e1565b6000818152600183016020526040812054801561266157600061259c600183613537565b85549091506000906125b090600190613537565b90508181146126155760008660000182815481106125d0576125d0613663565b90600052602060002001549050808760000184815481106125f3576125f3613663565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806126265761262661364d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104d8565b60009150506104d8565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106126a5576126a5613663565b602090810291909101015292915050565b6001600160a01b0384163b15611d565760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906126fa908990899088908890889060040161317e565b602060405180830381600087803b15801561271457600080fd5b505af1925050508015612744575060408051601f3d908101601f191682019092526127419181019061300a565b60015b612750576124a761368f565b6001600160e01b0319811663f23a6e6160e01b14611ff85760405162461bcd60e51b81526004016104ac906133e1565b60008181526001830160205260408120546127c7575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104d8565b5060006104d8565b60606127de84846000856127fb565b949350505050565b6000610d5d836001600160a01b038416612780565b60608247101561285c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ac565b843b6128aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ac565b600080866001600160a01b031685876040516128c69190613104565b60006040518083038185875af1925050503d8060008114612903576040519150601f19603f3d011682016040523d82523d6000602084013e612908565b606091505b5091509150612918828286612923565b979650505050505050565b60608315612932575081610d5d565b8251156129425782518084602001fd5b8160405162461bcd60e51b81526004016104ac9190613361565b8280546129689061357a565b90600052602060002090601f01602090048101928261298a57600085556129d0565b82601f106129a357805160ff19168380011785556129d0565b828001600101855582156129d0579182015b828111156129d05782518255916020019190600101906129b5565b506129dc929150612a5a565b5090565b8280548282559060005260206000209081019282156129d057916020028201828111156129d05782518255916020019190600101906129b5565b6040518060a00160405280606081526020016000815260200160006005811115612a4657612a46613637565b815260200160608152602001606081525090565b5b808211156129dc5760008155600101612a5b565b60006001600160401b03831115612a8857612a88613679565b604051612a9f601f8501601f1916602001826135da565b809150838152848484011115612ab457600080fd5b83836020830137600060208583010152509392505050565b600082601f830112612add57600080fd5b81356020612aea826134fc565b604051612af782826135da565b8381528281019150858301600585901b87018401881015612b1757600080fd5b60005b85811015612b3657813584529284019290840190600101612b1a565b5090979650505050505050565b600082601f830112612b5457600080fd5b610d5d83833560208501612a6f565b803560068110612b7257600080fd5b919050565b600060208284031215612b8957600080fd5b8135610d5d81613733565b60008060408385031215612ba757600080fd5b8235612bb281613733565b91506020830135612bc281613733565b809150509250929050565b600080600080600060a08688031215612be557600080fd5b8535612bf081613733565b94506020860135612c0081613733565b935060408601356001600160401b0380821115612c1c57600080fd5b612c2889838a01612acc565b94506060880135915080821115612c3e57600080fd5b612c4a89838a01612acc565b93506080880135915080821115612c6057600080fd5b50612c6d88828901612b43565b9150509295509295909350565b600080600080600060a08688031215612c9257600080fd5b8535612c9d81613733565b94506020860135612cad81613733565b9350604086013592506060860135915060808601356001600160401b03811115612cd657600080fd5b612c6d88828901612b43565b60008060408385031215612cf557600080fd5b8235612d0081613733565b91506020830135612bc281613748565b60008060408385031215612d2357600080fd5b8235612d2e81613733565b946020939093013593505050565b600080600060608486031215612d5157600080fd5b8335612d5c81613733565b95602085013595506040909401359392505050565b60008060408385031215612d8457600080fd5b82356001600160401b0380821115612d9b57600080fd5b818501915085601f830112612daf57600080fd5b81356020612dbc826134fc565b604051612dc982826135da565b8381528281019150858301600585901b870184018b1015612de957600080fd5b600096505b84871015612e15578035612e0181613733565b835260019690960195918301918301612dee565b5096505086013592505080821115612e2c57600080fd5b50612e3985828601612acc565b9150509250929050565b60006020808385031215612e5657600080fd5b82356001600160401b0380821115612e6d57600080fd5b818501915085601f830112612e8157600080fd5b8135612e8c816134fc565b604051612e9982826135da565b8281528581019150848601600584901b860187018a1015612eb957600080fd5b60005b84811015612f8d57813586811115612ed357600080fd5b870160a0818d03601f1901811315612eea57600080fd5b612ef26134ed565b8a83013589811115612f0357600080fd5b612f118f8d83870101612b43565b82525060408301358b820152612f2960608401612b63565b6040820152608083013589811115612f4057600080fd5b612f4e8f8d83870101612acc565b606083015250908201359088821115612f6657600080fd5b612f748e8c84860101612b43565b6080820152865250509287019290870190600101612ebc565b50909998505050505050505050565b600060208284031215612fae57600080fd5b81356001600160401b03811115612fc457600080fd5b6127de84828501612acc565b600060208284031215612fe257600080fd5b8151610d5d81613748565b600060208284031215612fff57600080fd5b8135610d5d81613756565b60006020828403121561301c57600080fd5b8151610d5d81613756565b60006020828403121561303957600080fd5b5035919050565b60006020828403121561305257600080fd5b5051919050565b6000806040838503121561306c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156130ab5781518752958201959082019060010161308f565b509495945050505050565b600081518084526130ce81602086016020860161354e565b601f01601f19169290920160200192915050565b6006811061310057634e487b7160e01b600052602160045260246000fd5b9052565b6000825161311681846020870161354e565b9190910192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061314c9083018661307b565b828103606084015261315e818661307b565b9050828103608084015261317281856130b6565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612918908301846130b6565b6020808252825182820181905260009190848201906040850190845b818110156131f95783516001600160a01b0316835292840192918401916001016131d4565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561325357815180518552868101518786015285015115158585015260609093019290850190600101613222565b5091979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561331257603f19898403018552815160a081518186526132ad828701826130b6565b9150508882015189860152878201516132c8898701826130e2565b50606080830151868303828801526132e0838261307b565b92505050608080830151925085820381870152506132fe81836130b6565b968901969450505090860190600101613287565b509098975050505050505050565b602081526000610d5d602083018461307b565b604081526000613346604083018561307b565b8281036020840152613358818561307b565b95945050505050565b602081526000610d5d60208301846130b6565b60808152600061338760808301876130b6565b85602084015261339a60408401866130e2565b828103606084015261291881856130b6565b6060815260006133bf60608301866130b6565b84602084015282810360408401526133d781856130b6565b9695505050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040516134f9816135b5565b90565b60006001600160401b0382111561351557613515613679565b5060051b60200190565b6000821982111561353257613532613621565b500190565b60008282101561354957613549613621565b500390565b60005b83811015613569578181015183820152602001613551565b83811115611b605750506000910152565b600181811c9082168061358e57607f821691505b602082108114156135af57634e487b7160e01b600052602260045260246000fd5b50919050565b60a081016001600160401b03811182821017156135d4576135d4613679565b60405250565b601f8201601f191681016001600160401b03811182821017156135ff576135ff613679565b6040525050565b600060001982141561361a5761361a613621565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156134f95760046000803e5060005160e01c90565b600060443d10156136b85790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156136e757505050505090565b82850191508151818111156136ff5750505050505090565b843d87010160208285010111156137195750505050505090565b613728602082860101876135da565b509095945050505050565b6001600160a01b03811681146106cd57600080fd5b80151581146106cd57600080fd5b6001600160e01b0319811681146106cd57600080fdfea264697066735822122082da9a943af0e7cf936ec539e367391e4c29b7314af26afd5dd8006f8953d9e464736f6c63430008050033516d66325a41795a5847694233505270316e454731737339564d7274726e777574616f7454685535744d786a6a35516d54336a516a437a416d5059384d6f3473485970674e33636f767477376f37586275644d444469435834516839687474703a2f2f6465762e62656e6e6e6e7373732e636f6d3a33393130302f5f6d6574612f516d55615247715379774d3455797642684c5736366577574468654b32684b666e763450596f746a7543766f4161516d594b47623770366b32335850374847643633744a38633466745054386d59515a754c5a704c6a323665467463000000000000000000000000d58c289ce3c8ed38110ec96ca131de2a4ded1912