[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "currentGame", "type": "uint256" } ], "name": "GameEnded", "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": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "string", "name": "encryptedScore", "type": "string" }, { "indexed": false, "internalType": "string", "name": "hashScore", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "currentGame", "type": "uint256" } ], "name": "ScoreAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "newUser", "type": "event" }, { "inputs": [], "name": "activeTokenCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clearScores", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentGame", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "forwarder", "outputs": [ { "internalType": "address", "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getScore", "outputs": [ { "internalType": "string", "name": "encryptedScore", "type": "string" }, { "internalType": "string", "name": "hashScore", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" } ], "name": "isAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "safeMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newForwarder", "type": "address" } ], "name": "setForwarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "encryptedScore", "type": "string" }, { "internalType": "string", "name": "hashScore", "type": "string" } ], "name": "setUserScore", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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" } ]
608060405234801561000f575f80fd5b5060405161339c38038061339c8339818101604052810190610031919061026d565b806040518060400160405280600681526020017f576f72646c6500000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5752444c00000000000000000000000000000000000000000000000000000000815250815f90816100ac91906104d2565b5080600190816100bc91906104d2565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161012691906105b0565b60405180910390fd5b61013e8161014c60201b60201c565b505f600b81905550506105c9565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61023c82610213565b9050919050565b61024c81610232565b8114610256575f80fd5b50565b5f8151905061026781610243565b92915050565b5f602082840312156102825761028161020f565b5b5f61028f84828501610259565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061031357607f821691505b602082108103610326576103256102cf565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261034d565b610392868361034d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103d66103d16103cc846103aa565b6103b3565b6103aa565b9050919050565b5f819050919050565b6103ef836103bc565b6104036103fb826103dd565b848454610359565b825550505050565b5f90565b61041761040b565b6104228184846103e6565b505050565b5b818110156104455761043a5f8261040f565b600181019050610428565b5050565b601f82111561048a5761045b8161032c565b6104648461033e565b81016020851015610473578190505b61048761047f8561033e565b830182610427565b50505b505050565b5f82821c905092915050565b5f6104aa5f198460080261048f565b1980831691505092915050565b5f6104c2838361049b565b9150826002028217905092915050565b6104db82610298565b67ffffffffffffffff8111156104f4576104f36102a2565b5b6104fe82546102fc565b610509828285610449565b5f60209050601f83116001811461053a575f8415610528578287015190505b61053285826104b7565b865550610599565b601f1984166105488661032c565b5f5b8281101561056f5784890151825560018201915060208501945060208101905061054a565b8683101561058c5784890151610588601f89168261049b565b8355505b6001600288020188555050505b505050505050565b6105aa81610232565b82525050565b5f6020820190506105c35f8301846105a1565b92915050565b612dc6806105d65f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c8063715018a6116100dc578063b88d4fde11610095578063c87b56dd1161006f578063c87b56dd14610420578063e985e9c514610450578063f2fde38b14610480578063f645d4f91461049c57610171565b8063b88d4fde146103b8578063b9998a24146103d4578063babcc539146103f057610171565b8063715018a61461032e5780638b68e038146103385780638b7d9cad146103565780638da5cb5b1461036057806395d89b411461037e578063a22cb4651461039c57610171565b806340d097c31161012e57806340d097c31461025c57806342842e0e146102785780635ea160e71461029457806360b663bb146102b05780636352211e146102ce57806370a08231146102fe57610171565b806301ffc9a71461017557806306fdde03146101a5578063081812fc146101c3578063095ea7b3146101f35780630e1af57b1461020f57806323b872dd14610240575b5f80fd5b61018f600480360381019061018a91906120fe565b6104ba565b60405161019c9190612143565b60405180910390f35b6101ad61059b565b6040516101ba91906121cc565b60405180910390f35b6101dd60048036038101906101d8919061221f565b61062a565b6040516101ea9190612289565b60405180910390f35b61020d600480360381019061020891906122cc565b610645565b005b6102296004803603810190610224919061221f565b61065b565b60405161023792919061230a565b60405180910390f35b61025a6004803603810190610255919061233f565b610825565b005b6102766004803603810190610271919061238f565b610924565b005b610292600480360381019061028d919061233f565b6109d9565b005b6102ae60048036038101906102a991906124e6565b6109f8565b005b6102b8610b6d565b6040516102c5919061257d565b60405180910390f35b6102e860048036038101906102e3919061221f565b610b73565b6040516102f59190612289565b60405180910390f35b6103186004803603810190610313919061238f565b610b84565b604051610325919061257d565b60405180910390f35b610336610c3a565b005b610340610c4d565b60405161034d919061257d565b60405180910390f35b61035e610c53565b005b610368610de0565b6040516103759190612289565b60405180910390f35b610386610e08565b60405161039391906121cc565b60405180910390f35b6103b660048036038101906103b191906125c0565b610e98565b005b6103d260048036038101906103cd919061269c565b610eae565b005b6103ee60048036038101906103e9919061238f565b610ed3565b005b61040a6004803603810190610405919061238f565b610f1e565b6040516104179190612143565b60405180910390f35b61043a6004803603810190610435919061221f565b611019565b60405161044791906121cc565b60405180910390f35b61046a6004803603810190610465919061271c565b61107f565b6040516104779190612143565b60405180910390f35b61049a6004803603810190610495919061238f565b61110d565b005b6104a4611191565b6040516104b19190612289565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105945750610593826111b6565b5b9050919050565b60605f80546105a990612787565b80601f01602080910402602001604051908101604052809291908181526020018280546105d590612787565b80156106205780601f106105f757610100808354040283529160200191610620565b820191905f5260205f20905b81548152906001019060200180831161060357829003601f168201915b5050505050905090565b5f6106348261121f565b5061063e826112a5565b9050919050565b61065782826106526112de565b6112e5565b5050565b6060805f73ffffffffffffffffffffffffffffffffffffffff1661067e846112f7565b73ffffffffffffffffffffffffffffffffffffffff16036106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb90612801565b60405180910390fd5b5f60085f8581526020019081526020015f206040518060400160405290815f8201805461070090612787565b80601f016020809104026020016040519081016040528092919081815260200182805461072c90612787565b80156107775780601f1061074e57610100808354040283529160200191610777565b820191905f5260205f20905b81548152906001019060200180831161075a57829003601f168201915b5050505050815260200160018201805461079090612787565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90612787565b80156108075780601f106107de57610100808354040283529160200191610807565b820191905f5260205f20905b8154815290600101906020018083116107ea57829003601f168201915b5050505050815250509050805f015181602001519250925050915091565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610895575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161088c9190612289565b60405180910390fd5b5f6108a883836108a36112de565b611330565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461091e578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016109159392919061281f565b60405180910390fd5b50505050565b61092c61153b565b5f60075f81548092919061093f90612881565b91905055905061094f82826115c2565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff16817fac6f3b3478499a86fb027b918c393ac90993bb6b0e228789805ca8ea34e0cae260405160405180910390a35050565b6109f383838360405180602001604052805f815250610eae565b505050565b610a0061153b565b5f73ffffffffffffffffffffffffffffffffffffffff16610a20846112f7565b73ffffffffffffffffffffffffffffffffffffffff1603610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90612801565b60405180910390fd5b5f60085f8581526020019081526020015f205f018054610a9590612787565b905003610b075760405180604001604052808381526020018281525060085f8581526020019081526020015f205f820151815f019081610ad59190612a65565b506020820151816001019081610aeb9190612a65565b50905050600a5f815480929190610b0190612881565b91905055505b5f610b1184610b73565b9050600b548173ffffffffffffffffffffffffffffffffffffffff16857f98f11b3b25866b5f3dd73d6551ac91476a31a9c7001b8b78c34957925bdf8dfc8686604051610b5f92919061230a565b60405180910390a450505050565b600b5481565b5f610b7d8261121f565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bf5575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610bec9190612289565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c4261153b565b610c4b5f6115df565b565b600a5481565b610c5b610de0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ce05750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690612b7e565b60405180910390fd5b5f5b600754811015610d90575f60085f8381526020019081526020015f205f018054610d4a90612787565b905014610d835760085f8281526020019081526020015f205f8082015f610d719190612040565b600182015f610d809190612040565b50505b8080600101915050610d21565b505f600a81905550600b547fce24807f7e4b60b4e641462f13029fa5e5f79075bbc3f8e5cd43ecd19661d76060405160405180910390a2600b5f815480929190610dd990612881565b9190505550565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e1790612787565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4390612787565b8015610e8e5780601f10610e6557610100808354040283529160200191610e8e565b820191905f5260205f20905b815481529060010190602001808311610e7157829003601f168201915b5050505050905090565b610eaa610ea36112de565b83836116a2565b5050565b610eb9848484610825565b610ecd610ec46112de565b8585858561180b565b50505050565b610edb61153b565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610f27610de0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f625760019050611014565b5f610f6c83610b84565b11610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390612be6565b60405180910390fd5b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60085f8381526020019081526020015f205f01805461100c90612787565b905014159150505b919050565b60606110248261121f565b505f61102e6119b7565b90505f81511161104c5760405180602001604052805f815250611077565b80611056846119cd565b604051602001611067929190612c3e565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61111561153b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611185575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161117c9190612289565b60405180910390fd5b61118e816115df565b50565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061122a836112f7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361129c57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611293919061257d565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6112f28383836001611a97565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f8061133b846112f7565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461137c5761137b818486611c56565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611407576113bb5f855f80611a97565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461148657600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6115436112de565b73ffffffffffffffffffffffffffffffffffffffff16611561610de0565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576115846112de565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115b79190612289565b60405180910390fd5b565b6115db828260405180602001604052805f815250611d19565b5050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361171257816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016117099190612289565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117fe9190612143565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156119b0578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016118699493929190612cb3565b6020604051808303815f875af19250505080156118a457506040513d601f19601f820116820180604052508101906118a19190612d11565b60015b611925573d805f81146118d2576040519150601f19603f3d011682016040523d82523d5f602084013e6118d7565b606091505b505f81510361191d57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119149190612289565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119ae57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119a59190612289565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60605f60016119db84611d3c565b0190505f8167ffffffffffffffff8111156119f9576119f86123c2565b5b6040519080825280601f01601f191660200182016040528015611a2b5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611a8c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611a8157611a80612d3c565b5b0494505f8503611a38575b819350505050919050565b8080611acf57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c01575f611ade8461121f565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b4857508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611b5b5750611b59818461107f565b155b15611b9d57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611b949190612289565b60405180910390fd5b8115611bff57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611c61838383611e8d565b611d14575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd557806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611ccc919061257d565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611d0b929190612d69565b60405180910390fd5b505050565b611d238383611f4d565b611d37611d2e6112de565b5f85858561180b565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d98577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611d8e57611d8d612d3c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611dd5576d04ee2d6d415b85acef81000000008381611dcb57611dca612d3c565b5b0492506020810190505b662386f26fc100008310611e0457662386f26fc100008381611dfa57611df9612d3c565b5b0492506010810190505b6305f5e1008310611e2d576305f5e1008381611e2357611e22612d3c565b5b0492506008810190505b6127108310611e52576127108381611e4857611e47612d3c565b5b0492506004810190505b60648310611e755760648381611e6b57611e6a612d3c565b5b0492506002810190505b600a8310611e84576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f4457508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f055750611f04848461107f565b5b80611f4357508273ffffffffffffffffffffffffffffffffffffffff16611f2b836112a5565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbd575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611fb49190612289565b60405180910390fd5b5f611fc983835f611330565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461203b575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016120329190612289565b60405180910390fd5b505050565b50805461204c90612787565b5f825580601f1061205d575061207a565b601f0160209004905f5260205f2090810190612079919061207d565b5b50565b5b80821115612094575f815f90555060010161207e565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120dd816120a9565b81146120e7575f80fd5b50565b5f813590506120f8816120d4565b92915050565b5f60208284031215612113576121126120a1565b5b5f612120848285016120ea565b91505092915050565b5f8115159050919050565b61213d81612129565b82525050565b5f6020820190506121565f830184612134565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61219e8261215c565b6121a88185612166565b93506121b8818560208601612176565b6121c181612184565b840191505092915050565b5f6020820190508181035f8301526121e48184612194565b905092915050565b5f819050919050565b6121fe816121ec565b8114612208575f80fd5b50565b5f81359050612219816121f5565b92915050565b5f60208284031215612234576122336120a1565b5b5f6122418482850161220b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122738261224a565b9050919050565b61228381612269565b82525050565b5f60208201905061229c5f83018461227a565b92915050565b6122ab81612269565b81146122b5575f80fd5b50565b5f813590506122c6816122a2565b92915050565b5f80604083850312156122e2576122e16120a1565b5b5f6122ef858286016122b8565b92505060206123008582860161220b565b9150509250929050565b5f6040820190508181035f8301526123228185612194565b905081810360208301526123368184612194565b90509392505050565b5f805f60608486031215612356576123556120a1565b5b5f612363868287016122b8565b9350506020612374868287016122b8565b92505060406123858682870161220b565b9150509250925092565b5f602082840312156123a4576123a36120a1565b5b5f6123b1848285016122b8565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6123f882612184565b810181811067ffffffffffffffff82111715612417576124166123c2565b5b80604052505050565b5f612429612098565b905061243582826123ef565b919050565b5f67ffffffffffffffff821115612454576124536123c2565b5b61245d82612184565b9050602081019050919050565b828183375f83830152505050565b5f61248a6124858461243a565b612420565b9050828152602081018484840111156124a6576124a56123be565b5b6124b184828561246a565b509392505050565b5f82601f8301126124cd576124cc6123ba565b5b81356124dd848260208601612478565b91505092915050565b5f805f606084860312156124fd576124fc6120a1565b5b5f61250a8682870161220b565b935050602084013567ffffffffffffffff81111561252b5761252a6120a5565b5b612537868287016124b9565b925050604084013567ffffffffffffffff811115612558576125576120a5565b5b612564868287016124b9565b9150509250925092565b612577816121ec565b82525050565b5f6020820190506125905f83018461256e565b92915050565b61259f81612129565b81146125a9575f80fd5b50565b5f813590506125ba81612596565b92915050565b5f80604083850312156125d6576125d56120a1565b5b5f6125e3858286016122b8565b92505060206125f4858286016125ac565b9150509250929050565b5f67ffffffffffffffff821115612618576126176123c2565b5b61262182612184565b9050602081019050919050565b5f61264061263b846125fe565b612420565b90508281526020810184848401111561265c5761265b6123be565b5b61266784828561246a565b509392505050565b5f82601f830112612683576126826123ba565b5b813561269384826020860161262e565b91505092915050565b5f805f80608085870312156126b4576126b36120a1565b5b5f6126c1878288016122b8565b94505060206126d2878288016122b8565b93505060406126e38782880161220b565b925050606085013567ffffffffffffffff811115612704576127036120a5565b5b6127108782880161266f565b91505092959194509250565b5f8060408385031215612732576127316120a1565b5b5f61273f858286016122b8565b9250506020612750858286016122b8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061279e57607f821691505b6020821081036127b1576127b061275a565b5b50919050565b7f546f6b656e20646f6573206e6f742065786973740000000000000000000000005f82015250565b5f6127eb601483612166565b91506127f6826127b7565b602082019050919050565b5f6020820190508181035f830152612818816127df565b9050919050565b5f6060820190506128325f83018661227a565b61283f602083018561256e565b61284c604083018461227a565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61288b826121ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128bd576128bc612854565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026129247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826128e9565b61292e86836128e9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61296961296461295f846121ec565b612946565b6121ec565b9050919050565b5f819050919050565b6129828361294f565b61299661298e82612970565b8484546128f5565b825550505050565b5f90565b6129aa61299e565b6129b5818484612979565b505050565b5b818110156129d8576129cd5f826129a2565b6001810190506129bb565b5050565b601f821115612a1d576129ee816128c8565b6129f7846128da565b81016020851015612a06578190505b612a1a612a12856128da565b8301826129ba565b50505b505050565b5f82821c905092915050565b5f612a3d5f1984600802612a22565b1980831691505092915050565b5f612a558383612a2e565b9150826002028217905092915050565b612a6e8261215c565b67ffffffffffffffff811115612a8757612a866123c2565b5b612a918254612787565b612a9c8282856129dc565b5f60209050601f831160018114612acd575f8415612abb578287015190505b612ac58582612a4a565b865550612b2c565b601f198416612adb866128c8565b5f5b82811015612b0257848901518255600182019150602085019450602081019050612add565b86831015612b1f5784890151612b1b601f891682612a2e565b8355505b6001600288020188555050505b505050505050565b7f43616c6c6572206973206e6f74206f776e6572206f7220666f727761726465725f82015250565b5f612b68602083612166565b9150612b7382612b34565b602082019050919050565b5f6020820190508181035f830152612b9581612b5c565b9050919050565b7f4164647265737320646f6573206e6f74206f776e20616e7920746f6b656e73005f82015250565b5f612bd0601f83612166565b9150612bdb82612b9c565b602082019050919050565b5f6020820190508181035f830152612bfd81612bc4565b9050919050565b5f81905092915050565b5f612c188261215c565b612c228185612c04565b9350612c32818560208601612176565b80840191505092915050565b5f612c498285612c0e565b9150612c558284612c0e565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f612c8582612c61565b612c8f8185612c6b565b9350612c9f818560208601612176565b612ca881612184565b840191505092915050565b5f608082019050612cc65f83018761227a565b612cd3602083018661227a565b612ce0604083018561256e565b8181036060830152612cf28184612c7b565b905095945050505050565b5f81519050612d0b816120d4565b92915050565b5f60208284031215612d2657612d256120a1565b5b5f612d3384828501612cfd565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050612d7c5f83018561227a565b612d89602083018461256e565b939250505056fea26469706673582212200ad62aa4cec2138e15d6fba6508c2c230ed4ddc3d58633d14c9171c694395d5b64736f6c634300081a0033000000000000000000000000ac5290dcd0d958fdd25cff52f81ff350cae77603