[ { "inputs": [], "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "factoryAddress", "type": "address" }, { "internalType": "uint16[]", "name": "_probabilities", "type": "uint16[]" } ], "name": "addNewOption", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "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": "address", "name": "account", "type": "address" } ], "name": "batchBalanceOf", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "optionId", "type": "uint256" } ], "name": "classFactoryAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "opitonId", "type": "uint256" } ], "name": "classProbabilities", "outputs": [ { "internalType": "uint16[]", "name": "", "type": "uint16[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "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": "mintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "numOptions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "_optionId", "type": "uint256" }, { "internalType": "address", "name": "_factoryAddress", "type": "address" } ], "name": "setFactoryForOption", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_optionId", "type": "uint256" }, { "internalType": "uint16[]", "name": "_probabilities", "type": "uint16[]" } ], "name": "setProbabilitiesForOption", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_seed", "type": "uint256" } ], "name": "setSeed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_numOptions", "type": "uint256" }, { "internalType": "uint256", "name": "_seed", "type": "uint256" } ], "name": "setState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newuri", "type": "string" } ], "name": "setURI", "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": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_optionId", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "unpack", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b506040805180820190915260208082527f68747470733a2f2f6170692e6379626572706f702e6f6e6c696e652f626f782f908201526200005181620000a0565b5060016005556006805460ff191690556200006e600033620000b9565b6200009a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620000b9565b62000249565b8051620000b590600290602084019062000166565b5050565b60008281526004602090815260408083206001600160a01b0385168452909152902054620000b5908390839060ff16620000b55760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b82805462000174906200020c565b90600052602060002090601f016020900481019282620001985760008555620001e3565b82601f10620001b357805160ff1916838001178555620001e3565b82800160010185558215620001e3579182015b82811115620001e3578251825591602001919060010190620001c6565b50620001f1929150620001f5565b5090565b5b80821115620001f15760008155600101620001f6565b600181811c908216806200022157607f821691505b602082108114156200024357634e487b7160e01b600052602260045260246000fd5b50919050565b61355780620002596000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063731133e911610130578063bd34c391116100b8578063d547741f1161007c578063d547741f1461051d578063e830a67b14610530578063e985e9c514610543578063f242432a1461057f578063f5298aca1461059257600080fd5b8063bd34c39114610485578063bd85b03914610498578063c32a50f9146104b8578063c548d0b7146104cb578063d5391393146104f657600080fd5b8063a1f4e081116100ff578063a1f4e08114610431578063a217fddf14610444578063a22cb4651461044c578063b54826e81461045f578063b9d77bfc1461047257600080fd5b8063731133e9146103e45780638456cb59146103f757806391d14854146103ff57806395d89b411461041257600080fd5b806336568abe116101b35780634f558e79116101825780634f558e79146103715780634ff253d5146103935780635954ef9e146103a65780635c975abb146103c65780636b20c454146103d157600080fd5b806336568abe1461032e5780633f4ba83a146103415780634b97aed9146103495780634e1273f41461035157600080fd5b80630e89341c116101fa5780630e89341c146102bf5780631f7fdffa146102d2578063248a9ca3146102e55780632eb2c2d6146103085780632f2ff15d1461031b57600080fd5b8062fdd58e1461022b57806301ffc9a71461025157806302fe53051461027457806306fdde0314610289575b600080fd5b61023e6102393660046125a5565b6105a5565b6040519081526020015b60405180910390f35b61026461025f3660046125e7565b61063f565b6040519015158152602001610248565b6102876102823660046126a3565b61064a565b005b604080518082019091526011815270086f2c4cae4e0dee04098dedee84084def607b1b60208201525b6040516102489190612747565b6102b26102cd36600461275a565b610663565b6102876102e0366004612827565b6106a4565b61023e6102f336600461275a565b60009081526004602052604090206001015490565b6102876103163660046128c1565b610705565b61028761032936600461296e565b610795565b61028761033c36600461296e565b6107c0565b61028761083a565b61023e610851565b61036461035f36600461299e565b6108dc565b6040516102489190612aa5565b61026461037f36600461275a565b600090815260036020526040902054151590565b6103646103a1366004612ab8565b610a05565b6103b96103b436600461275a565b610aa6565b6040516102489190612ad5565b60065460ff16610264565b6102876103df366004612b1d565b610b37565b6102876103f2366004612b92565b610b7a565b610287610bd4565b61026461040d36600461296e565b610be8565b60408051808201909152600381526221a62160e91b60208201526102b2565b61028761043f36600461296e565b610c13565b61023e600081565b61028761045a366004612be8565b610c9e565b61028761046d366004612c9a565b610ca9565b610287610480366004612cdf565b610cf1565b610287610493366004612cdf565b610d43565b61023e6104a636600461275a565b60009081526003602052604090205490565b6102876104c636600461275a565b610e18565b6104de6104d936600461275a565b610e92565b6040516001600160a01b039091168152602001610248565b61023e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61028761052b36600461296e565b610f1f565b61028761053e366004612d01565b610f45565b610264610551366004612d31565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61028761058d366004612d5f565b610f8d565b6102876105a0366004612dc7565b610fd2565b60006001600160a01b0383166106165760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b600061063982611015565b6000610656813361103a565b61065f8261109e565b5050565b60606000610670836110b1565b90508061067c84611145565b60405160200161068d929190612dfc565b604051602081830303815290604052915050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106cf813361103a565b60065460ff16156106f25760405162461bcd60e51b815260040161060d90612e2b565b6106fe8585858561124a565b5050505050565b6001600160a01b03851633148061072157506107218533610551565b6107885760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161060d565b6106fe85858585856113a4565b6000828152600460205260409020600101546107b1813361103a565b6107bb8383611546565b505050565b6001600160a01b03811633146108305760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161060d565b61065f82826115cc565b6000610846813361103a565b61084e611633565b50565b604051636e36eb7960e01b8152600760048201526000907393e201b64262e08a489a175b92f5f551c446ab6a90636e36eb799060240160206040518083038186803b15801561089f57600080fd5b505af41580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190612e55565b905090565b606081518351146109415760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161060d565b600083516001600160401b0381111561095c5761095c612604565b604051908082528060200260200182016040528015610985578160200160208202803683370190505b50905060005b84518110156109fd576109d08582815181106109a9576109a9612e6e565b60200260200101518583815181106109c3576109c3612e6e565b60200260200101516105a5565b8282815181106109e2576109e2612e6e565b60209081029190910101526109f681612e9a565b905061098b565b509392505050565b60606000610a11610851565b6001600160401b03811115610a2857610a28612604565b604051908082528060200260200182016040528015610a51578160200160208202803683370190505b50905060005b610a5f610851565b811015610a9f57610a7084826105a5565b828281518110610a8257610a82612e6e565b602090810291909101015280610a9781612e9a565b915050610a57565b5092915050565b60405163b986c1bf60e01b815260076004820152602481018290526060907393e201b64262e08a489a175b92f5f551c446ab6a9063b986c1bf9060440160006040518083038186803b158015610afb57600080fd5b505af4158015610b0f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106399190810190612eb5565b6001600160a01b038316331480610b535750610b538333610551565b610b6f5760405162461bcd60e51b815260040161060d90612f59565b6107bb8383836116c6565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610ba5813361103a565b60065460ff1615610bc85760405162461bcd60e51b815260040161060d90612e2b565b6106fe85858585611854565b6000610be0813361103a565b61084e61192a565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610c1f813361103a565b604051638a96bff560e01b815260076004820152602481018490526001600160a01b03831660448201527393e201b64262e08a489a175b92f5f551c446ab6a90638a96bff5906064015b60006040518083038186803b158015610c8157600080fd5b505af4158015610c95573d6000803e3d6000fd5b50505050505050565b61065f338383611982565b6000610cb5813361103a565b6040516336e3d03160e21b81527393e201b64262e08a489a175b92f5f551c446ab6a9063db8f40c490610c699060079087908790600401612fd6565b6000610cfd813361103a565b60405163030316ef60e11b81526007600482015260248101849052604481018390527393e201b64262e08a489a175b92f5f551c446ab6a906306062dde90606401610c69565b60065460ff1615610d665760405162461bcd60e51b815260040161060d90612e2b565b60026005541415610db95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060d565b6002600555610dc9338383611a63565b610e0f600783338433604051602001610dfa919060609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405230611b64565b50506001600555565b6000610e24813361103a565b604051630e8cb5fd60e11b815260076004820152602481018390527393e201b64262e08a489a175b92f5f551c446ab6a90631d196bfa9060440160006040518083038186803b158015610e7657600080fd5b505af4158015610e8a573d6000803e3d6000fd5b505050505050565b60405163d6de5c1360e01b815260076004820152602481018290526000907393e201b64262e08a489a175b92f5f551c446ab6a9063d6de5c139060440160206040518083038186803b158015610ee757600080fd5b505af4158015610efb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190613009565b600082815260046020526040902060010154610f3b813361103a565b6107bb83836115cc565b6000610f51813361103a565b604051632307b97160e11b81527393e201b64262e08a489a175b92f5f551c446ab6a9063460f72e290610c699060079087908790600401613026565b6001600160a01b038516331480610fa95750610fa98533610551565b610fc55760405162461bcd60e51b815260040161060d90612f59565b6106fe8585858585611cbb565b6001600160a01b038316331480610fee5750610fee8333610551565b61100a5760405162461bcd60e51b815260040161060d90612f59565b6107bb838383611a63565b60006001600160e01b03198216637965db0b60e01b1480610639575061063982611dcf565b6110448282610be8565b61065f5761105c816001600160a01b03166014611e1f565b611067836020611e1f565b604051602001611078929190613045565b60408051601f198184030181529082905262461bcd60e51b825261060d91600401612747565b805161065f9060029060208401906124f7565b6060600280546110c0906130ba565b80601f01602080910402602001604051908101604052809291908181526020018280546110ec906130ba565b80156111395780601f1061110e57610100808354040283529160200191611139565b820191906000526020600020905b81548152906001019060200180831161111c57829003601f168201915b50505050509050919050565b6060816111695750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611193578061117d81612e9a565b915061118c9050600a8361310b565b915061116d565b6000816001600160401b038111156111ad576111ad612604565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b5090505b8415611242576111ec60018361311f565b91506111f9600a86613136565b61120490603061314a565b60f81b81838151811061121957611219612e6e565b60200101906001600160f81b031916908160001a90535061123b600a8661310b565b94506111db565b949350505050565b6001600160a01b0384166112705760405162461bcd60e51b815260040161060d90613162565b81518351146112915760405162461bcd60e51b815260040161060d906131a3565b336112a181600087878787611fc1565b60005b845181101561133c578381815181106112bf576112bf612e6e565b60200260200101516000808784815181106112dc576112dc612e6e565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611324919061314a565b9091555081905061133481612e9a565b9150506112a4565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161138d9291906131eb565b60405180910390a46106fe81600087878787611fcf565b81518351146113c55760405162461bcd60e51b815260040161060d906131a3565b6001600160a01b0384166113eb5760405162461bcd60e51b815260040161060d90613210565b336113fa818787878787611fc1565b60005b84518110156114e057600085828151811061141a5761141a612e6e565b60200260200101519050600085838151811061143857611438612e6e565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114885760405162461bcd60e51b815260040161060d90613255565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114c590849061314a565b92505081905550505050806114d990612e9a565b90506113fd565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115309291906131eb565b60405180910390a4610e8a818787878787611fcf565b6115508282610be8565b61065f5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556115883390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6115d68282610be8565b1561065f5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60065460ff1661167c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161060d565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0383166116ec5760405162461bcd60e51b815260040161060d9061329f565b805182511461170d5760405162461bcd60e51b815260040161060d906131a3565b600033905061173081856000868660405180602001604052806000815250611fc1565b60005b83518110156117f557600084828151811061175057611750612e6e565b60200260200101519050600084838151811061176e5761176e612e6e565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156117be5760405162461bcd60e51b815260040161060d906132e2565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806117ed81612e9a565b915050611733565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516118469291906131eb565b60405180910390a450505050565b6001600160a01b03841661187a5760405162461bcd60e51b815260040161060d90613162565b3361189a8160008761188b8861213a565b6118948861213a565b87611fc1565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906118ca90849061314a565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46106fe81600087878787612185565b60065460ff161561194d5760405162461bcd60e51b815260040161060d90612e2b565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116a93390565b816001600160a01b0316836001600160a01b031614156119f65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161060d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038316611a895760405162461bcd60e51b815260040161060d9061329f565b33611ab881856000611a9a8761213a565b611aa38761213a565b60405180602001604052806000815250611fc1565b6000838152602081815260408083206001600160a01b038816845290915290205482811015611af95760405162461bcd60e51b815260040161060d906132e2565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b85548510611bab5760405162461bcd60e51b81526020600482015260146024820152735f6f7074696f6e206f7574206f662072616e676560601b604482015260640161060d565b600160005b84811015611c6b57600087815260018901602090815260408083208054825181850281018501909352808352611c46938d93929190830182828015611c3c57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611c035790505b505050505061224f565b9050611c568989838a87896122e4565b50508080611c6390612e9a565b915050611bb0565b5060408051858152600160208201526001600160a01b0387169188917fd8c55eae4f6ffa3dfbfba23f50cb5e242e86d347736fe1b910ad11bff616d839910160405180910390a350505050505050565b6001600160a01b038416611ce15760405162461bcd60e51b815260040161060d90613210565b33611cf181878761188b8861213a565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611d325760405162461bcd60e51b815260040161060d90613255565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611d6f90849061314a565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c95828888888888612185565b60006001600160e01b03198216636cdb3d1360e11b1480611e0057506001600160e01b031982166303a24d0760e21b145b8061063957506301ffc9a760e01b6001600160e01b0319831614610639565b60606000611e2e836002613326565b611e3990600261314a565b6001600160401b03811115611e5057611e50612604565b6040519080825280601f01601f191660200182016040528015611e7a576020820181803683370190505b509050600360fc1b81600081518110611e9557611e95612e6e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ec457611ec4612e6e565b60200101906001600160f81b031916908160001a9053506000611ee8846002613326565b611ef390600161314a565b90505b6001811115611f6b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611f2757611f27612e6e565b1a60f81b828281518110611f3d57611f3d612e6e565b60200101906001600160f81b031916908160001a90535060049490941c93611f6481613345565b9050611ef6565b508315611fba5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161060d565b9392505050565b610e8a86868686868661237b565b6001600160a01b0384163b15610e8a5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612013908990899088908890889060040161335c565b602060405180830381600087803b15801561202d57600080fd5b505af192505050801561205d575060408051601f3d908101601f1916820190925261205a918101906133ba565b60015b61210a576120696133d7565b806308c379a014156120a3575061207e6133f3565b8061208957506120a5565b8060405162461bcd60e51b815260040161060d9190612747565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161060d565b6001600160e01b0319811663bc197c8160e01b14610c955760405162461bcd60e51b815260040161060d9061347c565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061217457612174612e6e565b602090810291909101015292915050565b6001600160a01b0384163b15610e8a5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906121c990899089908890889088906004016134c4565b602060405180830381600087803b1580156121e357600080fd5b505af1925050508015612213575060408051601f3d908101601f19168201909252612210918101906133ba565b60015b61221f576120696133d7565b6001600160e01b0319811663f23a6e6160e01b14610c955760405162461bcd60e51b815260040161060d9061347c565b60008061226761271061226186612487565b906124eb565b9050600060018451612279919061311f565b90505b80156122d957600084828151811061229657612296612e6e565b602002602001015190508061ffff168361ffff1610156122ba575091506106399050565b6122c481846134fe565b925050806122d181613345565b91505061227c565b506000949350505050565b60008581526002870160205260408082205490516363bdb36160e11b8152600481018790526001600160a01b03868116602483015260448201869052608060648301526084820184905290911690819063c77b66c29060a401600060405180830381600087803b15801561235757600080fd5b505af115801561236b573d6000803e3d6000fd5b50989a9950505050505050505050565b6001600160a01b0385166124025760005b8351811015612400578281815181106123a7576123a7612e6e565b6020026020010151600360008684815181106123c5576123c5612e6e565b6020026020010151815260200190815260200160002060008282546123ea919061314a565b909155506123f9905081612e9a565b905061238c565b505b6001600160a01b038416610e8a5760005b8351811015610c955782818151811061242e5761242e612e6e565b60200260200101516003600086848151811061244c5761244c612e6e565b602002602001015181526020019081526020016000206000828254612471919061311f565b90915550612480905081612e9a565b9050612413565b60008061249560014361311f565b600384015460408051924060208401526bffffffffffffffffffffffff193360601b1690830152605482015260740160408051601f19818403018152919052805160209091012060039093018390555090919050565b6000611fba8284613136565b828054612503906130ba565b90600052602060002090601f016020900481019282612525576000855561256b565b82601f1061253e57805160ff191683800117855561256b565b8280016001018555821561256b579182015b8281111561256b578251825591602001919060010190612550565b5061257792915061257b565b5090565b5b80821115612577576000815560010161257c565b6001600160a01b038116811461084e57600080fd5b600080604083850312156125b857600080fd5b82356125c381612590565b946020939093013593505050565b6001600160e01b03198116811461084e57600080fd5b6000602082840312156125f957600080fd5b8135611fba816125d1565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561263f5761263f612604565b6040525050565b60006001600160401b0383111561265f5761265f612604565b604051612676601f8501601f19166020018261261a565b80915083815284848401111561268b57600080fd5b83836020830137600060208583010152509392505050565b6000602082840312156126b557600080fd5b81356001600160401b038111156126cb57600080fd5b8201601f810184136126dc57600080fd5b61124284823560208401612646565b60005b838110156127065781810151838201526020016126ee565b83811115612715576000848401525b50505050565b600081518084526127338160208601602086016126eb565b601f01601f19169290920160200192915050565b602081526000611fba602083018461271b565b60006020828403121561276c57600080fd5b5035919050565b60006001600160401b0382111561278c5761278c612604565b5060051b60200190565b600082601f8301126127a757600080fd5b813560206127b482612773565b6040516127c1828261261a565b83815260059390931b85018201928281019150868411156127e157600080fd5b8286015b848110156127fc57803583529183019183016127e5565b509695505050505050565b600082601f83011261281857600080fd5b611fba83833560208501612646565b6000806000806080858703121561283d57600080fd5b843561284881612590565b935060208501356001600160401b038082111561286457600080fd5b61287088838901612796565b9450604087013591508082111561288657600080fd5b61289288838901612796565b935060608701359150808211156128a857600080fd5b506128b587828801612807565b91505092959194509250565b600080600080600060a086880312156128d957600080fd5b85356128e481612590565b945060208601356128f481612590565b935060408601356001600160401b038082111561291057600080fd5b61291c89838a01612796565b9450606088013591508082111561293257600080fd5b61293e89838a01612796565b9350608088013591508082111561295457600080fd5b5061296188828901612807565b9150509295509295909350565b6000806040838503121561298157600080fd5b82359150602083013561299381612590565b809150509250929050565b600080604083850312156129b157600080fd5b82356001600160401b03808211156129c857600080fd5b818501915085601f8301126129dc57600080fd5b813560206129e982612773565b6040516129f6828261261a565b83815260059390931b8501820192828101915089841115612a1657600080fd5b948201945b83861015612a3d578535612a2e81612590565b82529482019490820190612a1b565b96505086013592505080821115612a5357600080fd5b50612a6085828601612796565b9150509250929050565b600081518084526020808501945080840160005b83811015612a9a57815187529582019590820190600101612a7e565b509495945050505050565b602081526000611fba6020830184612a6a565b600060208284031215612aca57600080fd5b8135611fba81612590565b6020808252825182820181905260009190848201906040850190845b81811015612b1157835161ffff1683529284019291840191600101612af1565b50909695505050505050565b600080600060608486031215612b3257600080fd5b8335612b3d81612590565b925060208401356001600160401b0380821115612b5957600080fd5b612b6587838801612796565b93506040860135915080821115612b7b57600080fd5b50612b8886828701612796565b9150509250925092565b60008060008060808587031215612ba857600080fd5b8435612bb381612590565b9350602085013592506040850135915060608501356001600160401b03811115612bdc57600080fd5b6128b587828801612807565b60008060408385031215612bfb57600080fd5b8235612c0681612590565b91506020830135801515811461299357600080fd5b61ffff8116811461084e57600080fd5b600082601f830112612c3c57600080fd5b81356020612c4982612773565b604051612c56828261261a565b83815260059390931b8501820192828101915086841115612c7657600080fd5b8286015b848110156127fc578035612c8d81612c1b565b8352918301918301612c7a565b60008060408385031215612cad57600080fd5b8235612cb881612590565b915060208301356001600160401b03811115612cd357600080fd5b612a6085828601612c2b565b60008060408385031215612cf257600080fd5b50508035926020909101359150565b60008060408385031215612d1457600080fd5b8235915060208301356001600160401b03811115612cd357600080fd5b60008060408385031215612d4457600080fd5b8235612d4f81612590565b9150602083013561299381612590565b600080600080600060a08688031215612d7757600080fd5b8535612d8281612590565b94506020860135612d9281612590565b9350604086013592506060860135915060808601356001600160401b03811115612dbb57600080fd5b61296188828901612807565b600080600060608486031215612ddc57600080fd5b8335612de781612590565b95602085013595506040909401359392505050565b60008351612e0e8184602088016126eb565b835190830190612e228183602088016126eb565b01949350505050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600060208284031215612e6757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612eae57612eae612e84565b5060010190565b60006020808385031215612ec857600080fd5b82516001600160401b03811115612ede57600080fd5b8301601f81018513612eef57600080fd5b8051612efa81612773565b604051612f07828261261a565b82815260059290921b8301840191848101915087831115612f2757600080fd5b928401925b82841015612f4e578351612f3f81612c1b565b82529284019290840190612f2c565b979650505050505050565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b600081518084526020808501945080840160005b83811015612a9a57815161ffff1687529582019590820190600101612fb6565b8381526001600160a01b038316602082015260606040820181905260009061300090830184612fa2565b95945050505050565b60006020828403121561301b57600080fd5b8151611fba81612590565b8381528260208201526060604082015260006130006060830184612fa2565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161307d8160178501602088016126eb565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516130ae8160288401602088016126eb565b01602801949350505050565b600181811c908216806130ce57607f821691505b602082108114156130ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b60008261311a5761311a6130f5565b500490565b60008282101561313157613131612e84565b500390565b600082613145576131456130f5565b500690565b6000821982111561315d5761315d612e84565b500190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6040815260006131fe6040830185612a6a565b82810360208401526130008185612a6a565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b600081600019048311821515161561334057613340612e84565b500290565b60008161335457613354612e84565b506000190190565b6001600160a01b0386811682528516602082015260a06040820181905260009061338890830186612a6a565b828103606084015261339a8186612a6a565b905082810360808401526133ae818561271b565b98975050505050505050565b6000602082840312156133cc57600080fd5b8151611fba816125d1565b600060033d11156133f05760046000803e5060005160e01c5b90565b600060443d10156134015790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561343057505050505090565b82850191508151818111156134485750505050505090565b843d87010160208285010111156134625750505050505090565b6134716020828601018761261a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612f4e9083018461271b565b600061ffff8381169083168181101561351957613519612e84565b03939250505056fea2646970667358221220a82aa24a2e8432760d21680ee0743b3dd0d214e455d462970ca31ffff5180d5b64736f6c63430008090033