@pvpbet/pvpbet
Version:
A decentralized PVP betting platform based on the Ethereum Virtual Machine (EVM).
1,087 lines • 65.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "BetManager",
"sourceName": "contracts/BetManager.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [],
"name": "CannotReceive",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidAmount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "InvalidChip",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "InvalidToken",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "ServiceHasNotStartedYet",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "TransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "UnauthorizedAccess",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "paid",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "Underpayment",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "betChipManager",
"type": "address"
}
],
"name": "BetChipManagerSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "betConfigurator",
"type": "address"
}
],
"name": "BetConfiguratorSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "bet",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "chip",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "version",
"type": "string"
}
],
"name": "BetCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "betFactory",
"type": "address"
}
],
"name": "BetFactorySet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "betOptionFactory",
"type": "address"
}
],
"name": "BetOptionFactorySet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "CreationFeeSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "govToken",
"type": "address"
}
],
"name": "GovTokenSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"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": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Received",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "votingEscrow",
"type": "address"
}
],
"name": "VotingEscrowSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "WithdrawnERC20",
"type": "event"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "betChipManager",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "betConfigurator",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "betFactory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "betOptionFactory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "betOptionVersion",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "betVersion",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "title",
"type": "string"
},
{
"internalType": "string",
"name": "description",
"type": "string"
},
{
"internalType": "string",
"name": "iconURL",
"type": "string"
},
{
"internalType": "string",
"name": "forumURL",
"type": "string"
},
{
"internalType": "string[]",
"name": "options",
"type": "string[]"
}
],
"internalType": "struct IBet.BetDetails",
"name": "details",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "wageringPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verifyingPeriodDuration",
"type": "uint256"
}
],
"name": "createBet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "title",
"type": "string"
},
{
"internalType": "string",
"name": "description",
"type": "string"
},
{
"internalType": "string",
"name": "iconURL",
"type": "string"
},
{
"internalType": "string",
"name": "forumURL",
"type": "string"
},
{
"internalType": "string[]",
"name": "options",
"type": "string[]"
}
],
"internalType": "struct IBet.BetDetails",
"name": "details",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "wageringPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verifyingPeriodDuration",
"type": "uint256"
},
{
"internalType": "address",
"name": "chip",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "createBet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "title",
"type": "string"
},
{
"internalType": "string",
"name": "description",
"type": "string"
},
{
"internalType": "string",
"name": "iconURL",
"type": "string"
},
{
"internalType": "string",
"name": "forumURL",
"type": "string"
},
{
"internalType": "string[]",
"name": "options",
"type": "string[]"
}
],
"internalType": "struct IBet.BetDetails",
"name": "details",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "wageringPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verifyingPeriodDuration",
"type": "uint256"
},
{
"internalType": "address",
"name": "chip",
"type": "address"
}
],
"name": "createBet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "title",
"type": "string"
},
{
"internalType": "string",
"name": "description",
"type": "string"
},
{
"internalType": "string",
"name": "iconURL",
"type": "string"
},
{
"internalType": "string",
"name": "forumURL",
"type": "string"
},
{
"internalType": "string[]",
"name": "options",
"type": "string[]"
}
],
"internalType": "struct IBet.BetDetails",
"name": "details",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "wageringPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verifyingPeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "createBet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "creationFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "govToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "initialBetChipManager",
"type": "address"
},
{
"internalType": "address",
"name": "initialBetConfigurator",
"type": "address"
},
{
"internalType": "address",
"name": "initialBetFactory",
"type": "address"
},
{
"internalType": "address",
"name": "initialBetOptionFactory",
"type": "address"
},
{
"internalType": "address",
"name": "initialVotingEscrow",
"type": "address"
},
{
"internalType": "address",
"name": "initialGovToken",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "bet",
"type": "address"
}
],
"name": "isBet",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newBetChipManager",
"type": "address"
}
],
"name": "setBetChipManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newBetConfigurator",
"type": "address"
}
],
"name": "setBetConfigurator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newBetFactory",
"type": "address"
}
],
"name": "setBetFactory",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newBetOptionFactory",
"type": "address"
}
],
"name": "setBetOptionFactory",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "setCreationFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newGovToken",
"type": "address"
}
],
"name": "setGovToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newVotingEscrow",
"type": "address"
}
],
"name": "setVotingEscrow",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "votingEscrow",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdrawERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "withdrawERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161296361003e6000396000818161160c01528181611635015261176e01526129636000f3fe6080604052600436106102075760003560e01c806389fefbe111610118578063ce5ec92e116100a0578063f2fde38b1161006f578063f2fde38b14610635578063f4786c1214610655578063f4f3b2001461069e578063f649f140146106be578063f65b86a3146106d357600080fd5b8063ce5ec92e146105c2578063d10c826a146105e2578063d9f4797b14610602578063dce0b4e41461062057600080fd5b8063a1db9782116100e7578063a1db978214610511578063a86ea69514610531578063ad3cb1cc14610551578063b7d8622514610582578063cc2a9a5b146105a257600080fd5b806389fefbe1146104745780638da5cb5b146104945780639ef40b2c146104d1578063a1accaff146104f157600080fd5b80632e1a96181161019b5780634f2bfe5b1161016a5780634f2bfe5b146103db57806352d1902d146103f957806354fd4d501461041c578063715018a61461044a5780638129fc1c1461045f57600080fd5b80632e1a9618146103805780633ccfd60b1461039e57806345d60b96146103b35780634f1ef286146103c857600080fd5b806308c1c967116101d757806308c1c96714610300578063252c69e51461032257806327550e19146103425780632e1a7d4d1461036057600080fd5b80622558e614610248578063023b0d9b1461028557806305268cff146102a357806306fdde03146102c157600080fd5b366102435760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561025457600080fd5b50610268610263366004611ebe565b6106f3565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029157600080fd5b506003546001600160a01b0316610268565b3480156102af57600080fd5b506001546001600160a01b0316610268565b3480156102cd57600080fd5b5060408051808201909152600d81526c282b282132ba26b0b730b3b2b960991b60208201525b60405161027c9190611f5b565b34801561030c57600080fd5b5061032061031b366004611f83565b610736565b005b34801561032e57600080fd5b5061026861033d366004611fe8565b61074a565b34801561034e57600080fd5b506002546001600160a01b0316610268565b34801561036c57600080fd5b5061032061037b36600461208c565b610793565b34801561038c57600080fd5b506004546001600160a01b0316610268565b3480156103aa57600080fd5b506103206107a7565b3480156103bf57600080fd5b506102f36107bf565b6103206103d636600461213b565b610841565b3480156103e757600080fd5b506000546001600160a01b0316610268565b34801561040557600080fd5b5061040e610860565b60405190815260200161027c565b34801561042857600080fd5b50604080518082019091526005815264312e322e3160d81b60208201526102f3565b34801561045657600080fd5b5061032061087d565b34801561046b57600080fd5b5061032061088f565b34801561048057600080fd5b5061032061048f366004611f83565b6109a4565b3480156104a057600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610268565b3480156104dd57600080fd5b506102686104ec3660046121cd565b6109b5565b3480156104fd57600080fd5b5061026861050c36600461222f565b6109f0565b34801561051d57600080fd5b5061032061052c3660046122bf565b610a2f565b34801561053d57600080fd5b5061032061054c366004611f83565b610a42565b34801561055d57600080fd5b506102f3604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561058e57600080fd5b5061032061059d36600461208c565b610a54565b3480156105ae57600080fd5b506103206105bd3660046122eb565b610a65565b3480156105ce57600080fd5b506103206105dd366004611f83565b610bad565b3480156105ee57600080fd5b506103206105fd366004611f83565b610bbf565b34801561060e57600080fd5b506005546001600160a01b0316610268565b34801561062c57600080fd5b5060065461040e565b34801561064157600080fd5b50610320610650366004611f83565b610bd0565b34801561066157600080fd5b5061068e610670366004611f83565b6001600160a01b031660009081526007602052604090205460ff1690565b604051901515815260200161027c565b3480156106aa57600080fd5b506103206106b9366004611f83565b610c10565b3480156106ca57600080fd5b506102f3610c25565b3480156106df57600080fd5b506103206106ee366004611f83565b610c6f565b600654600090801561071e5761071c6107146001546001600160a01b031690565b339083610c80565b505b61072b8585856000610e86565b9150505b9392505050565b61073e611395565b610747816113f0565b50565b60065460009080156107795761077761076b6001546001600160a01b031690565b33908389898989611445565b505b6107858a8a8a8a610e86565b9a9950505050505050505050565b61079c33611543565b61074760008261154b565b6107b033611543565b6107bd600060001961154b565b565b6060600460009054906101000a90046001600160a01b03166001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa158015610814573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083c919081019061236d565b905090565b610849611601565b61085282611543565b61085c82826116a6565b5050565b600061086a611763565b5060008051602061290e83398151915290565b610885611395565b6107bd60006117ac565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156108d45750825b90506000826001600160401b031660011480156108f05750303b155b9050811580156108fe575080155b1561091c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561094657845460ff60401b1916600160401b1785555b61094f3361181d565b61095761182e565b831561099d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6109ac611395565b61074781611836565b60065460009080156109d8576109d66107146001546001600160a01b031690565b505b6109e486868686610e86565b9150505b949350505050565b6006546000908015610a1357610a1161076b6001546001600160a01b031690565b505b610a208989896000610e86565b9150505b979650505050505050565b610a3833611543565b61085c828261154b565b610a4b33611543565b61074781611884565b610a5c611395565b610747816118d2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610aaa5750825b90506000826001600160401b03166001148015610ac65750303b155b905081158015610ad4575080155b15610af25760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1c57845460ff60401b1916600160401b1785555b610b2461088f565b610b2d8b611907565b610b368a611955565b610b3f89611836565b610b48886113f0565b610b51876119a3565b610b5a86611884565b8315610ba057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b610bb633611543565b610747816119a3565b610bc7611395565b61074781611907565b610bd8611395565b6001600160a01b038116610c0757604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610747816117ac565b610c1933611543565b6107478160001961154b565b6005546040805163054fd4d560e41b815290516060926001600160a01b0316916354fd4d509160048083019260009291908290030181865afa158015610814573d6000803e3d6000fd5b610c77611395565b61074781611955565b60006001600160a01b038316610cd6576000198203610ca757836001600160a01b03163191505b81341015610cd15760405163d17e444b60e01b815234600482015260248101839052604401610bfe565b610e7c565b8260018301610d4c576040516370a0823160e01b81526001600160a01b0386811660048301528216906370a0823190602401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906123da565b92505b82600003610d5e57600091505061072f565b604051636eb1769f60e11b81526001600160a01b0386811660048301523060248301526000919083169063dd62ed3e90604401602060405180830381865afa158015610dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd291906123da565b905083811015610dff5760405163d17e444b60e01b81526004810182905260248101859052604401610bfe565b6040516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018690528316906323b872dd906064016020604051808303816000875af1158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7891906123f3565b5050505b5060019392505050565b600080610e9b6000546001600160a01b031690565b6001600160a01b031603610ec25760405163183b797560e31b815260040160405180910390fd5b6003546001600160a01b03168063de6f9cf2610ede8880612415565b6040518363ffffffff1660e01b8152600401610efb929190612484565b60006040518083038186803b158015610f1357600080fd5b505afa158015610f27573d6000803e3d6000fd5b5050506001600160a01b038216905063a69722de610f486020890189612415565b6040518363ffffffff1660e01b8152600401610f65929190612484565b60006040518083038186803b158015610f7d57600080fd5b505afa158015610f91573d6000803e3d6000fd5b5050506001600160a01b0382169050636f74204b610fb26080890189612498565b6040518363ffffffff1660e01b8152600401610fcf929190612580565b60006040518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b5050604051632873cc0560e11b815260048101889052602481018790526001600160a01b03841692506350e7980a915060440160006040518083038186803b15801561104657600080fd5b505afa15801561105a573d6000803e3d6000fd5b505050506001600160a01b038316158015906110e1575060025460405163016c570160e71b81526001600160a01b0385811660048301529091169063b62b808090602401602060405180830381865afa1580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906123f3565b155b1561114057604051634192fe4960e11b81526001600160a01b038481166004830152821690638325fc929060240160006040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050505b61118a6111506060880188612415565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119f192505050565b6111f8576001600160a01b03811663ad34232e6111aa6060890189612415565b6040518363ffffffff1660e01b81526004016111c7929190612484565b60006040518083038186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050505b60048054604051633e1fc8bd60e01b81526001600160a01b038681169382019390935260009291821691634fe3a3e09190851690633e1fc8bd906024016101a060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190612594565b898989338a61128e6000546001600160a01b031690565b6001546001600160a01b03166005546040516001600160e01b031960e08c901b1681526112d399989796959493929130916001600160a01b039091169060040161272e565b6020604051808303816000875af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190612835565b9050336001600160a01b038581169083167ff952582963ca2204c3518a5ad9a26372402cb56578ea02e1bc8e0b31229a07da426113516107bf565b60405161135f929190612852565b60405180910390a46001600160a01b0381166000908152600760205260409020805460ff19166001179055915050949350505050565b336113c77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107bd5760405163118cdaa760e01b8152336004820152602401610bfe565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f10dfdf4d4d4b88fcee4fe9e2015e3d209d8ca7aab0b1031cefca858d257fa92c906020015b60405180910390a150565b60006001600160a01b03871661149b57600019860361146c57876001600160a01b03163195505b853410156114965760405163d17e444b60e01b815234600482015260248101879052604401610bfe565b611535565b8660018701611511576040516370a0823160e01b81526001600160a01b038a811660048301528216906370a0823190602401602060405180830381865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e91906123da565b96505b86600003611523576000915050610a24565b611533888a308a8a8a8a8a6119f6565b505b506001979650505050505050565b610747611395565b33611557818484611aae565b506001600160a01b0383166115ae57806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516115a191815260200190565b60405180910390a2505050565b826001600160a01b0316816001600160a01b03167f31e3f58fbb760a4c31ae5c6416229fca813390b5fa0de533ee4cef14b2b344db846040516115f391815260200190565b60405180910390a35b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061168857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661167c60008051602061290e833981519152546001600160a01b031690565b6001600160a01b031614155b156107bd5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611700575060408051601f3d908101601f191682019092526116fd918101906123da565b60015b61172857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610bfe565b60008051602061290e833981519152811461175957604051632a87526960e21b815260048101829052602401610bfe565b6115fc8383611abd565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107bd5760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611825611b13565b61074781611b5c565b6107bd611b13565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f95e832398680d1bac60c58db9947fb4eba95fee298fcf2ce311ebbe68dbd1b279060200161143a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f1b737a2df6948bd6245ff6c5a979e43e3e9d2e2c233691f4445094a5ae6267a09060200161143a565b60068190556040518181527f65cf44d7c3dc10549f322afbe745b2a569e6e2a177f9465749a393afbc9c354f9060200161143a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fa96ab93d2dc7520c7e729dbab32b6c0ac8948056abd7ded7db6b02b8f38490529060200161143a565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f21c3afd39d6b1c2765dad2e6270d11d8c35aaa7fc1069fbd766e9afdcd1b240b9060200161143a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fdfc99f06c00ec9d9c39735fe0e3b20e8d77ecbe0eed7f1622dbda285002954e89060200161143a565b511590565b6040805160a0810182526001600160a01b038a811660608301908152608083018990528252602080830188905282840187905283518085018552918a1682528101889052915163187945bd60e11b81526e22d473030f116ddee9f6b43ac78ba3926330f28b7a92611a72929091908c908890889060040161286b565b600060405180830381600087803b158015611a8c57600080fd5b505af1158015611aa0573d6000803e3d6000fd5b505050505050505050505050565b60006109e88484846000611b64565b611ac682611d27565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b0b576115fc8282611d8c565b61085c611e02565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107bd57604051631afcd79f60e31b815260040160405180910390fd5b610bd8611b13565b6000806001600160a01b038516611bed576000198403611b82574793505b83600003611b945760009150506109e8565b6040516001600160a01b038716908590600081818185875af1925050503d8060008114611bdd576040519150601f19603f3d011682016040523d82523d6000602084013e611be2565b606091505b505080915050611ceb565b8460018501611c61576040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa158015611c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5e91906123da565b94505b84600003611c74576000925050506109e8565b60405163a9059cbb60e01b81526001600160a01b0388811660048301526024820187905282169063a9059cbb906044016020604051808303816000875af1158015611cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce791906123f3565b9150505b80611d1b5782611d115760405163c39ba1a960e01b815260048101859052602401610bfe565b60009150506109e8565b50600195945050505050565b806001600160a01b03163b600003611d5d57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610bfe565b60008051602061290e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611da991906128f1565b600060405180830381855af49150503d8060008114611de4576040519150601f19603f3d011682016040523d82523d6000602084013e611de9565b606091505b5091509150611df9858383611e21565b95945050505050565b34156107bd5760405163b398979f60e01b815260040160405180910390fd5b606082611e3657611e3182611e7d565b61072f565b8151158015611e4d57506001600160a01b0384163b155b15611e7657604051639996b31560e01b81526001600160a01b0385166004820152602401610bfe565b508061072f565b805115611e8d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600060a08284031215611eb857600080fd5b50919050565b600080600060608486031215611ed357600080fd5b83356001600160401b03811115611ee957600080fd5b611ef586828701611ea6565b9660208601359650604090950135949350505050565b60005b83811015611f26578181015183820152602001611f0e565b50506000910152565b60008151808452611f47816020860160208601611f0b565b601f01601f19169290920160200192915050565b60208152600061072f6020830184611f2f565b6001600160a01b038116811461074757600080fd5b600060208284031215611f9557600080fd5b813561072f81611f6e565b60008083601f840112611fb257600080fd5b5081356001600160401b03811115611fc957600080fd5b602083019150836020828501011115611fe157600080fd5b9250929050565b60008060008060008060008060e0898b03121561200457600080fd5b88356001600160401b038082111561201b57600080fd5b6120278c838d01611ea6565b995060208b0135985060408b0135975060608b0135915061204782611f6e565b90955060808a0135945060a08a0135935060c08a0135908082111561206b57600080fd5b506120788b828c01611fa0565b999c989b5096995094979396929594505050565b60006020828403121561209e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156120de576120de6120a5565b60405290565b604051601f8201601f191681016001600160401b038111828210171561210c5761210c6120a5565b604052919050565b60006001600160401b0382111561212d5761212d6120a5565b50601f01601f191660200190565b6000806040838503121561214e57600080fd5b823561215981611f6e565b915060208301356001600160401b0381111561217457600080fd5b8301601f8101851361218557600080fd5b803561219861219382612114565b6120e4565b8181528660208385010111156121ad57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080608085870312156121e357600080fd5b84356001600160401b038111156121f957600080fd5b61220587828801611ea6565b9450506020850135925060408501359150606085013561222481611f6e565b939692955090935050565b600080600080600080600060c0888a03121561224a57600080fd5b87356001600160401b038082111561226157600080fd5b61226d8b838c01611ea6565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a013591508082111561229f57600080fd5b506122ac8a828b01611fa0565b989b979a50959850939692959293505050565b600080604083850312156122d257600080fd5b82356122dd81611f6e565b946020939093013593505050565b60008060008060008060c0878903121561230457600080fd5b863561230f81611f6e565b9550602087013561231f81611f6e565b9450604087013561232f81611f6e565b9350606087013561233f81611f6e565b9250608087013561234f81611f6e565b915060a087013561235f81611f6e565b809150509295509295509295565b60006020828403121561237f57600080fd5b81516001600160401b0381111561239557600080fd5b8201601f810184136123a657600080fd5b80516123b461219382612114565b8181528560208385010111156123c957600080fd5b611df9826020830160208601611f0b565b6000602082840312156123ec57600080fd5b5051919050565b60006020828403121561240557600080fd5b8151801515811461072f57600080fd5b6000808335601e1984360301811261242c57600080fd5b8301803591506001600160401b0382111561244657600080fd5b602001915036819003821315611fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006109e860208301848661245b565b6000808335601e198436030181126124af57600080fd5b8301803591506001600160401b038211156124c957600080fd5b6020019150600581901b3603821315611fe157600080fd5b6000808335601e198436030181126124f857600080fd5b83016020810192503590506001600160401b0381111561251757600080fd5b803603821315611fe157600080fd5b818352600060208085019450848460051b86018460005b8781101561257357838303895261255482886124e1565b61255f85828461245b565b9a87019a945050509084019060010161253d565b5090979650505050505050565b6020815260006109e8602083018486612526565b60006101a082840312156125a757600080fd5b6125af6120bb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101808084015181830152508091505092915050565b600061264b82836124e1565b60a0855261265d60a08601828461245b565b91505061266d60208401846124e1565b858303602087015261268083828461245b565b9250505061269160408401846124e1565b85830360408701526126a483828461245b565b925050506126b560608401846124e1565b85830360608701526126c883828461245b565b925050506080830135601e198436030181126126e357600080fd5b83016020810190356001600160401b038111156126ff57600080fd5b8060051b360382131561271157600080fd5b8583036080870152612724838284612526565b9695505050505050565b60006102c08c51835260208d0151602084015260408d0151604084015260608d0151606084015260808d0151608084015260a08d015160a084015260c08d015160c084015260e08d015160e0840152610100808e01518185015250610120808e01518185015250610140808e01518185015250610160808e01518185015250610180808e01518185015250806101a08401526127cc8184018d61263f565b915050896101c0830152886101e08301526127f36102008301896001600160a01b03169052565b6001600160a01b039687166102208301529486166102408201529285166102608401529084166102808301529092166102a09092019190915295945050505050565b60006020828403121561284757600080fd5b815161072f81611f6e565b8281526040602082015260006109e86040830184611f2f565b600061010061288e83895180516001600160a01b03168252602090810151910152565b60208801516040840152604088015160608401526128c2608084018880516001600160a01b03168252602090810151910152565b6001600160a01b03861660c084015260e083018190526128e5818401858761245b565b98975050505050505050565b60008251612903818460208701611f0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220f1e78b0b2d08f2bba8aa24d40cb4b44185169effc6815c02e02a9b3dfaa0f8d464736f6c63430008140033",
"deployedBytecode": "0x6080604052600436106102075760003560e01c806389fefbe111610118578063ce5ec92e116100a0578063f2fde38b1161006f578063f2fde38b14610635578063f4786c1214610655578063f4f3b2001461069e578063f649f140146106be578063f65b86a3146106d357600080fd5b8063ce5ec92e146105c2578063d10c826a146105e2578063d9f4797b14610602578063dce0b4e41461062057600080fd5b8063a1db9782116100e7578063a1db978214610511578063a86ea69514610531578063ad3cb1cc14610551578063b7d8622514610582578063cc2a9a5b146105a257600080fd5b806389fefbe1146104745780638da5cb5b146104945780639ef40b2c146104d1578063a1accaff146104f157600080fd5b80632e1a96181161019b5780634f2bfe5b1161016a5780634f2bfe5b146103db57806352d1902d146103f957806354fd4d501461041c578063715018a61461044a5780638129fc1c1461045f57600080fd5b80632e1a9618146103805780633ccfd60b1461039e57806345d60b96146103b35780634f1ef286146103c857600080fd5b806308c1c967116101d757806308c1c96714610300578063252c69e51461032257806327550e19146103425780632e1a7d4d1461036057600080fd5b80622558e614610248578063023b0d9b1461028557806305268cff146102a357806306fdde03146102c157600080fd5b366102435760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561025457600080fd5b50610268610263366004611ebe565b6106f3565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029157600080fd5b506003546001600160a01b0316610268565b3480156102af57600080fd5b506001546001600160a01b0316610268565b3480156102cd57600080fd5b5060408051808201909152600d81526c282b282132ba26b0b730b3b2b960991b60208201525b60405161027c9190611f5b565b34801561030c57600080fd5b5061032061031b366004611f83565b610736565b005b34801561032e57600080fd5b5061026861033d366004611fe8565b61074a565b34801561034e57600080fd5b506002546001600160a01b0316610268565b34801561036c57600080fd5b5061032061037b36600461208c565b610793565b34801561038c57600080fd5b506004546001600160a01b0316610268565b3480156103aa57600080fd5b506103206107a7565b3480156103bf57600080fd5b506102f36107bf565b6103206103d636600461213b565b610841565b3480156103e757600080fd5b506000546001600160a01b0316610268565b34801561040557600080fd5b5061040e610860565b60405190815260200161027c565b34801561042857600080fd5b50604080518082019091526005815264312e322e3160d81b60208201526102f3565b34801561045657600080fd5b5061032061087d565b34801561046b57600080fd5b5061032061088f565b34801561048057600080fd5b5061032061048f366004611f83565b6109a4565b3480156104a057600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610268565b3480156104dd57600080fd5b506102686104ec3660046121cd565b6109b5565b3480156104fd57600080fd5b5061026861050c36600461222f565b6109f0565b34801561051d57600080fd5b5061032061052c3660046122bf565b610a2f565b34801561053d57600080fd5b5061032061054c366004611f83565b610a42565b34801561055d57600080fd5b506102f3604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561058e57600080fd5b5061032061059d36600461208c565b610a54565b3480156105ae57600080fd5b506103206105bd3660046122eb565b610a65565b3480156105ce57600080fd5b506103206105dd366004611f83565b610bad565b3480156105ee57600080fd5b506103206105fd366004611f83565b610bbf565b34801561060e57600080fd5b506005546001600160a01b0316610268565b34801561062c57600080fd5b5060065461040e565b34801561064157600080fd5b50610320610650366004611f83565b610bd0565b34801561066157600080fd5b5061068e610670366004611f83565b6001600160a01b031660009081526007602052604090205460ff1690565b604051901515815260200161027c565b3480156106aa57600080fd5b506103206106b9366004611f83565b610c10565b3480156106ca57600080fd5b506102f3610c25565b3480156106df57600080fd5b506103206106ee366004611f83565b610c6f565b600654600090801561071e5761071c6107146001546001600160a01b031690565b339083610c80565b505b61072b8585856000610e86565b9150505b9392505050565b61073e611395565b610747816113f0565b50565b60065460009080156107795761077761076b6001546001600160a01b031690565b33908389898989611445565b505b6107858a8a8a8a610e86565b9a9950505050505050505050565b61079c33611543565b61074760008261154b565b6107b033611543565b6107bd600060001961154b565b565b6060600460009054906101000a90046001600160a01b03166001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa158015610814573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083c919081019061236d565b905090565b610849611601565b61085282611543565b61085c82826116a6565b5050565b600061086a611763565b5060008051602061290e83398151915290565b610885611395565b6107bd60006117ac565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156108d45750825b90506000826001600160401b031660011480156108f05750303b155b9050811580156108fe575080155b1561091c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561094657845460ff60401b1916600160401b1785555b61094f3361181d565b61095761182e565b831561099d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6109ac611395565b61074781611836565b60065460009080156109d8576109d66107146001546001600160a01b031690565b505b6109e486868686610e86565b9150505b949350505050565b6006546000908015610a1357610a1161076b6001546001600160a01b031690565b505b610a208989896000610e86565b9150505b979650505050505050565b610a3833611543565b61085c828261154b565b610a4b33611543565b61074781611884565b610a5c611395565b610747816118d2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610aaa5